Published site at 687e53b7e49c1a149e55829bbeca6aa4edfe69e7.
diff --git a/acid-semantics.html b/acid-semantics.html
index a55d624..a75f72d 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -467,7 +467,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 66add9f..0e1acaa 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
Binary files differ
diff --git a/apidocs/constant-values.html b/apidocs/constant-values.html
index b3c1013..b4df38f 100644
--- a/apidocs/constant-values.html
+++ b/apidocs/constant-values.html
@@ -2180,419 +2180,426 @@
 <td class="colLast"><code>"hbase.replication.sink.service"</code></td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">
+<!--   -->
+</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/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</a></code></td>
+<td class="colLast"><code>"org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_DEFAULT">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></code></td>
 <td class="colLast"><code>10</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY">
 <!--   -->
 </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/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_KEY">REPLICATION_SOURCE_MAXTHREADS_KEY</a></code></td>
 <td class="colLast"><code>"hbase.replication.source.maxthreads"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME">
 <!--   -->
 </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/HConstants.html#REPLICATION_SOURCE_SERVICE_CLASSNAME">REPLICATION_SOURCE_SERVICE_CLASSNAME</a></code></td>
 <td class="colLast"><code>"hbase.replication.source.service"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT">
 <!--   -->
 </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/HConstants.html#REPLICATION_SOURCE_SHIPEDITS_TIMEOUT">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</a></code></td>
 <td class="colLast"><code>"replication.source.shipedits.timeout"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</a></code></td>
 <td class="colLast"><code>60000</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT">REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</a></code></td>
 <td class="colLast"><code>268435456</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_KEY">
 <!--   -->
 </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/HConstants.html#REPLICATION_SOURCE_TOTAL_BUFFER_KEY">REPLICATION_SOURCE_TOTAL_BUFFER_KEY</a></code></td>
 <td class="colLast"><code>"replication.total.buffer.quota"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.RPC_CODEC_CONF_KEY">
 <!--   -->
 </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/HConstants.html#RPC_CODEC_CONF_KEY">RPC_CODEC_CONF_KEY</a></code></td>
 <td class="colLast"><code>"hbase.client.rpc.codec"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.RPC_CURRENT_VERSION">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;byte</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#RPC_CURRENT_VERSION">RPC_CURRENT_VERSION</a></code></td>
 <td class="colLast"><code>0</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SEQNUM_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SEQNUM_QUALIFIER_STR">SEQNUM_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"seqnumDuringOpen"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SERVER_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SERVER_QUALIFIER_STR">SERVER_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"server"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SERVERNAME_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SERVERNAME_QUALIFIER_STR">SERVERNAME_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"sn"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SLOW_LOG_BUFFER_ENABLED_KEY">
 <!--   -->
 </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/HConstants.html#SLOW_LOG_BUFFER_ENABLED_KEY">SLOW_LOG_BUFFER_ENABLED_KEY</a></code></td>
 <td class="colLast"><code>"hbase.regionserver.slowlog.buffer.enabled"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY">
 <!--   -->
 </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/HConstants.html#SLOW_LOG_SYS_TABLE_ENABLED_KEY">SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></code></td>
 <td class="colLast"><code>"hbase.regionserver.slowlog.systable.enabled"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SNAPSHOT_DIR_NAME">
 <!--   -->
 </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/HConstants.html#SNAPSHOT_DIR_NAME">SNAPSHOT_DIR_NAME</a></code></td>
 <td class="colLast"><code>".hbase-snapshot"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME">
 <!--   -->
 </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/HConstants.html#SNAPSHOT_RESTORE_FAILSAFE_NAME">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></code></td>
 <td class="colLast"><code>"hbase.snapshot.restore.failsafe.name"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">
 <!--   -->
 </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/HConstants.html#SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></code></td>
 <td class="colLast"><code>"hbase.snapshot.restore.take.failsafe.snapshot"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SOCKET_RETRY_WAIT_MS">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#SOCKET_RETRY_WAIT_MS">SOCKET_RETRY_WAIT_MS</a></code></td>
 <td class="colLast"><code>200</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SPLIT_LOGDIR_NAME">
 <!--   -->
 </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/HConstants.html#SPLIT_LOGDIR_NAME">SPLIT_LOGDIR_NAME</a></code></td>
 <td class="colLast"><code>"splitWAL"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SPLITA_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SPLITA_QUALIFIER_STR">SPLITA_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"splitA"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SPLITB_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SPLITB_QUALIFIER_STR">SPLITB_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"splitB"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STARTCODE_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#STARTCODE_QUALIFIER_STR">STARTCODE_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"serverstartcode"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATE_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#STATE_QUALIFIER_STR">STATE_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"state"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_ADDRESS">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_ADDRESS">STATUS_MULTICAST_ADDRESS</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.address.ip"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_BIND_ADDRESS">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_BIND_ADDRESS">STATUS_MULTICAST_BIND_ADDRESS</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.bind.address.ip"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_NI_NAME">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_NI_NAME">STATUS_MULTICAST_NI_NAME</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.ni.name"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_PORT">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_PORT">STATUS_MULTICAST_PORT</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.address.port"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.publisher.bind.address.ip"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_PUBLISHED">
 <!--   -->
 </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/HConstants.html#STATUS_PUBLISHED">STATUS_PUBLISHED</a></code></td>
 <td class="colLast"><code>"hbase.status.published"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_PUBLISHED_DEFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;boolean</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#STATUS_PUBLISHED_DEFAULT">STATUS_PUBLISHED_DEFAULT</a></code></td>
 <td class="colLast"><code>false</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STORAGE_POLICY_PREFIX">
 <!--   -->
 </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/HConstants.html#STORAGE_POLICY_PREFIX">STORAGE_POLICY_PREFIX</a></code></td>
 <td class="colLast"><code>"storage_policy_"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STORE_FILE_REF_COUNT_THRESHOLD">
 <!--   -->
 </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/HConstants.html#STORE_FILE_REF_COUNT_THRESHOLD">STORE_FILE_REF_COUNT_THRESHOLD</a></code></td>
 <td class="colLast"><code>"hbase.regions.recovery.store.file.ref.count"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SYSTEMTABLE_QOS">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#SYSTEMTABLE_QOS">SYSTEMTABLE_QOS</a></code></td>
 <td class="colLast"><code>200</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.TABLE_FAMILY_STR">
 <!--   -->
 </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/HConstants.html#TABLE_FAMILY_STR">TABLE_FAMILY_STR</a></code></td>
 <td class="colLast"><code>"table"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.TABLE_MAX_ROWSIZE_DEFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;long</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#TABLE_MAX_ROWSIZE_DEFAULT">TABLE_MAX_ROWSIZE_DEFAULT</a></code></td>
 <td class="colLast"><code>1073741824L</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.TABLE_MAX_ROWSIZE_KEY">
 <!--   -->
 </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/HConstants.html#TABLE_MAX_ROWSIZE_KEY">TABLE_MAX_ROWSIZE_KEY</a></code></td>
 <td class="colLast"><code>"hbase.table.max.rowsize"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.TEMPORARY_FS_DIRECTORY_KEY">
 <!--   -->
 </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/HConstants.html#TEMPORARY_FS_DIRECTORY_KEY">TEMPORARY_FS_DIRECTORY_KEY</a></code></td>
 <td class="colLast"><code>"hbase.fs.tmp.dir"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.THREAD_WAKE_FREQUENCY">
 <!--   -->
 </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/HConstants.html#THREAD_WAKE_FREQUENCY">THREAD_WAKE_FREQUENCY</a></code></td>
 <td class="colLast"><code>"hbase.server.thread.wakefrequency"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.USE_META_REPLICAS">
 <!--   -->
 </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/HConstants.html#USE_META_REPLICAS">USE_META_REPLICAS</a></code></td>
 <td class="colLast"><code>"hbase.meta.replicas.use"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.UTF8_ENCODING">
 <!--   -->
 </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/HConstants.html#UTF8_ENCODING">UTF8_ENCODING</a></code></td>
 <td class="colLast"><code>"UTF-8"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.VERSION_FILE_NAME">
 <!--   -->
 </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/HConstants.html#VERSION_FILE_NAME">VERSION_FILE_NAME</a></code></td>
 <td class="colLast"><code>"hbase.version"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.VERSION_FILE_WRITE_ATTEMPTS">
 <!--   -->
 </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/HConstants.html#VERSION_FILE_WRITE_ATTEMPTS">VERSION_FILE_WRITE_ATTEMPTS</a></code></td>
 <td class="colLast"><code>"hbase.server.versionfile.writeattempts"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.VERSIONS">
 <!--   -->
 </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/HConstants.html#VERSIONS">VERSIONS</a></code></td>
 <td class="colLast"><code>"VERSIONS"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.WAL_STORAGE_POLICY">
 <!--   -->
 </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/HConstants.html#WAL_STORAGE_POLICY">WAL_STORAGE_POLICY</a></code></td>
 <td class="colLast"><code>"hbase.wal.storage.policy"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZEROES">
 <!--   -->
 </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/HConstants.html#ZEROES">ZEROES</a></code></td>
 <td class="colLast"><code>"00000000000000"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_CFG_PROPERTY_PREFIX">
 <!--   -->
 </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/HConstants.html#ZK_CFG_PROPERTY_PREFIX">ZK_CFG_PROPERTY_PREFIX</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property."</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL">
 <!--   -->
 </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/HConstants.html#ZK_CLIENT_KERBEROS_PRINCIPAL">ZK_CLIENT_KERBEROS_PRINCIPAL</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.client.kerberos.principal"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_CLIENT_KEYTAB_FILE">
 <!--   -->
 </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/HConstants.html#ZK_CLIENT_KEYTAB_FILE">ZK_CLIENT_KEYTAB_FILE</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.client.keytab.file"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_CONNECTION_REGISTRY_CLASS">
 <!--   -->
 </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/HConstants.html#ZK_CONNECTION_REGISTRY_CLASS">ZK_CONNECTION_REGISTRY_CLASS</a></code></td>
 <td class="colLast"><code>"org.apache.hadoop.hbase.client.ZKConnectionRegistry"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SERVER_KERBEROS_PRINCIPAL">
 <!--   -->
 </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/HConstants.html#ZK_SERVER_KERBEROS_PRINCIPAL">ZK_SERVER_KERBEROS_PRINCIPAL</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.server.kerberos.principal"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SERVER_KEYTAB_FILE">
 <!--   -->
 </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/HConstants.html#ZK_SERVER_KEYTAB_FILE">ZK_SERVER_KEYTAB_FILE</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.server.keytab.file"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SESSION_TIMEOUT">
 <!--   -->
 </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/HConstants.html#ZK_SESSION_TIMEOUT">ZK_SESSION_TIMEOUT</a></code></td>
 <td class="colLast"><code>"zookeeper.session.timeout"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;long</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS">ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS</a></code></td>
 <td class="colLast"><code>30000L</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SYNC_BLOCKING_TIMEOUT_MS">
 <!--   -->
 </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/HConstants.html#ZK_SYNC_BLOCKING_TIMEOUT_MS">ZK_SYNC_BLOCKING_TIMEOUT_MS</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.sync.timeout.millis"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_CLIENT_PORT">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_CLIENT_PORT">ZOOKEEPER_CLIENT_PORT</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property.clientPort"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_DATA_DIR">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_DATA_DIR">ZOOKEEPER_DATA_DIR</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property.dataDir"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_MAX_CLIENT_CNXNS">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_MAX_CLIENT_CNXNS">ZOOKEEPER_MAX_CLIENT_CNXNS</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property.maxClientCnxns"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_QUORUM">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_QUORUM">ZOOKEEPER_QUORUM</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.quorum"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_TICK_TIME">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_TICK_TIME">ZOOKEEPER_TICK_TIME</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property.tickTime"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_ZNODE_PARENT">
 <!--   -->
 </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>
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index c757fbf..36a41ab 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -12803,6 +12803,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME">REPLICATION_SINK_SERVICE_CLASSNAME</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_DEFAULT">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
diff --git a/apidocs/org/apache/hadoop/hbase/HConstants.html b/apidocs/org/apache/hadoop/hbase/HConstants.html
index 6f65cd6..e3c8f1b 100644
--- a/apidocs/org/apache/hadoop/hbase/HConstants.html
+++ b/apidocs/org/apache/hadoop/hbase/HConstants.html
@@ -1856,315 +1856,319 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME">REPLICATION_SINK_SERVICE_CLASSNAME</a></span></code>&nbsp;</td>
 </tr>
 <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/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</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/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_DEFAULT">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></span></code>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
 </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/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_KEY">REPLICATION_SOURCE_MAXTHREADS_KEY</a></span></code>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#REPLICATION_SOURCE_SERVICE_CLASSNAME">REPLICATION_SOURCE_SERVICE_CLASSNAME</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/HConstants.html#REPLICATION_SOURCE_SHIPEDITS_TIMEOUT">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</a></span></code>
 <div class="block">Configuration key for ReplicationSource shipeEdits timeout</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT">REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#REPLICATION_SOURCE_TOTAL_BUFFER_KEY">REPLICATION_SOURCE_TOTAL_BUFFER_KEY</a></span></code>
 <div class="block">Max total size of buffered entries in all replication peers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static int[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#RETRY_BACKOFF">RETRY_BACKOFF</a></span></code>
 <div class="block">Retrying we multiply hbase.client.pause setting by what we have in this array until we
  run out of array items.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#RPC_CODEC_CONF_KEY">RPC_CODEC_CONF_KEY</a></span></code>
 <div class="block">Configuration key for setting RPC codec class name</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#RPC_CURRENT_VERSION">RPC_CURRENT_VERSION</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#RPC_HEADER">RPC_HEADER</a></span></code>
 <div class="block">The first four bytes of Hadoop RPC connections</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SEQNUM_QUALIFIER">SEQNUM_QUALIFIER</a></span></code>
 <div class="block">The open seqnum column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SEQNUM_QUALIFIER_STR">SEQNUM_QUALIFIER_STR</a></span></code>
 <div class="block">The open seqnum column qualifier</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SERVER_QUALIFIER">SERVER_QUALIFIER</a></span></code>
 <div class="block">The server column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SERVER_QUALIFIER_STR">SERVER_QUALIFIER_STR</a></span></code>
 <div class="block">The server column qualifier</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SERVERNAME_QUALIFIER">SERVERNAME_QUALIFIER</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SERVERNAME_QUALIFIER_STR">SERVERNAME_QUALIFIER_STR</a></span></code>
 <div class="block">The serverName column qualifier.</div>
 </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/HConstants.html#SLOW_LOG_BUFFER_ENABLED_KEY">SLOW_LOG_BUFFER_ENABLED_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SLOW_LOG_SYS_TABLE_ENABLED_KEY">SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SLOWLOG_INFO_FAMILY">SLOWLOG_INFO_FAMILY</a></span></code>
 <div class="block">The slowlog info family</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SNAPSHOT_DIR_NAME">SNAPSHOT_DIR_NAME</a></span></code>
 <div class="block">Name of the directory to store all snapshots.</div>
 </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/HConstants.html#SNAPSHOT_RESTORE_FAILSAFE_NAME">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SOCKET_RETRY_WAIT_MS">SOCKET_RETRY_WAIT_MS</a></span></code>
 <div class="block">The delay when re-trying a socket operation in a loop (HBASE-4712)</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SPLIT_LOGDIR_NAME">SPLIT_LOGDIR_NAME</a></span></code>
 <div class="block">Used to construct the name of the splitlog directory for a region server</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SPLITA_QUALIFIER">SPLITA_QUALIFIER</a></span></code>
 <div class="block">The lower-half split region column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SPLITA_QUALIFIER_STR">SPLITA_QUALIFIER_STR</a></span></code>
 <div class="block">The lower-half split region column qualifier string.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SPLITB_QUALIFIER">SPLITB_QUALIFIER</a></span></code>
 <div class="block">The upper-half split region column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SPLITB_QUALIFIER_STR">SPLITB_QUALIFIER_STR</a></span></code>
 <div class="block">The upper-half split region column qualifier String.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#STARTCODE_QUALIFIER">STARTCODE_QUALIFIER</a></span></code>
 <div class="block">The startcode column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STARTCODE_QUALIFIER_STR">STARTCODE_QUALIFIER_STR</a></span></code>
 <div class="block">The startcode column qualifier</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#STATE_QUALIFIER">STATE_QUALIFIER</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STATE_QUALIFIER_STR">STATE_QUALIFIER_STR</a></span></code>
 <div class="block">The state column qualifier</div>
 </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/HConstants.html#STATUS_MULTICAST_ADDRESS">STATUS_MULTICAST_ADDRESS</a></span></code>
 <div class="block">IP to use for the multicast status messages between the master and the clients.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STATUS_MULTICAST_BIND_ADDRESS">STATUS_MULTICAST_BIND_ADDRESS</a></span></code>
 <div class="block">The address to use for binding the local socket for receiving multicast.</div>
 </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/HConstants.html#STATUS_MULTICAST_NI_NAME">STATUS_MULTICAST_NI_NAME</a></span></code>
 <div class="block">The network interface name to use for the multicast messages.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STATUS_MULTICAST_PORT">STATUS_MULTICAST_PORT</a></span></code>
 <div class="block">The port to use for the multicast messages.</div>
 </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/HConstants.html#STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></span></code>
 <div class="block">The address to use for binding the local socket for sending multicast.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STATUS_PUBLISHED">STATUS_PUBLISHED</a></span></code>
 <div class="block">Setting to activate, or not, the publication of the status by the master.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#STATUS_PUBLISHED_DEFAULT">STATUS_PUBLISHED_DEFAULT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STORAGE_POLICY_PREFIX">STORAGE_POLICY_PREFIX</a></span></code>
 <div class="block">Date Tiered Compaction tmp dir prefix name if use storage policy</div>
 </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/HConstants.html#STORE_FILE_REF_COUNT_THRESHOLD">STORE_FILE_REF_COUNT_THRESHOLD</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SYSTEMTABLE_QOS">SYSTEMTABLE_QOS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#TABLE_FAMILY">TABLE_FAMILY</a></span></code>
 <div class="block">The catalog family</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#TABLE_FAMILY_STR">TABLE_FAMILY_STR</a></span></code>
 <div class="block">The catalog family as a string</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#TABLE_MAX_ROWSIZE_DEFAULT">TABLE_MAX_ROWSIZE_DEFAULT</a></span></code>
 <div class="block">Default max row size (1 Gb).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#TABLE_MAX_ROWSIZE_KEY">TABLE_MAX_ROWSIZE_KEY</a></span></code>
 <div class="block">Max size of single row for Get's or Scan's without in-row scanning flag set.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#TABLE_STATE_QUALIFIER">TABLE_STATE_QUALIFIER</a></span></code>
 <div class="block">The serialized table state qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#TEMPORARY_FS_DIRECTORY_KEY">TEMPORARY_FS_DIRECTORY_KEY</a></span></code>
 <div class="block">Config key for hbase temporary directory in hdfs</div>
 </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/HConstants.html#THREAD_WAKE_FREQUENCY">THREAD_WAKE_FREQUENCY</a></span></code>
 <div class="block">Parameter name for how often threads should wake up</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#USE_META_REPLICAS">USE_META_REPLICAS</a></span></code>
 <div class="block">Conf key for enabling meta replication</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#UTF8_CHARSET">UTF8_CHARSET</a></span></code>
 <div class="block">When we encode strings, we always specify UTF8 encoding</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#UTF8_ENCODING">UTF8_ENCODING</a></span></code>
 <div class="block">When we encode strings, we always specify UTF8 encoding</div>
 </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/HConstants.html#VERSION_FILE_NAME">VERSION_FILE_NAME</a></span></code>
 <div class="block">name of version file</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#VERSION_FILE_WRITE_ATTEMPTS">VERSION_FILE_WRITE_ATTEMPTS</a></span></code>
 <div class="block">Parameter name for how often we should try to write a version file, before failing</div>
 </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/HConstants.html#VERSIONS">VERSIONS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#WAL_STORAGE_POLICY">WAL_STORAGE_POLICY</a></span></code>
 <div class="block">Configuration name of WAL storage policy
@@ -2172,98 +2176,98 @@
  See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html</div>
 </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/Long.html?is-external=true" title="class or interface in java.lang">Long</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#ZERO_L">ZERO_L</a></span></code>
 <div class="block">long constant for zero</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZEROES">ZEROES</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/HConstants.html#ZK_CFG_PROPERTY_PREFIX">ZK_CFG_PROPERTY_PREFIX</a></span></code>
 <div class="block">Common prefix of ZooKeeper configuration properties</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#ZK_CFG_PROPERTY_PREFIX_LEN">ZK_CFG_PROPERTY_PREFIX_LEN</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/HConstants.html#ZK_CLIENT_KERBEROS_PRINCIPAL">ZK_CLIENT_KERBEROS_PRINCIPAL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZK_CLIENT_KEYTAB_FILE">ZK_CLIENT_KEYTAB_FILE</a></span></code>
 <div class="block">Configuration keys for programmatic JAAS configuration for secured ZK interaction</div>
 </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/HConstants.html#ZK_CONNECTION_REGISTRY_CLASS">ZK_CONNECTION_REGISTRY_CLASS</a></span></code>
 <div class="block">Full class name of the Zookeeper based connection registry implementation</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZK_SERVER_KERBEROS_PRINCIPAL">ZK_SERVER_KERBEROS_PRINCIPAL</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/HConstants.html#ZK_SERVER_KEYTAB_FILE">ZK_SERVER_KEYTAB_FILE</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZK_SESSION_TIMEOUT">ZK_SESSION_TIMEOUT</a></span></code>
 <div class="block">Configuration key for ZooKeeper session timeout</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS">ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZK_SYNC_BLOCKING_TIMEOUT_MS">ZK_SYNC_BLOCKING_TIMEOUT_MS</a></span></code>
 <div class="block">Timeout for the ZK sync() call</div>
 </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/HConstants.html#ZOOKEEPER_CLIENT_PORT">ZOOKEEPER_CLIENT_PORT</a></span></code>
 <div class="block">Parameter name for the client port that the zookeeper listens on</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZOOKEEPER_DATA_DIR">ZOOKEEPER_DATA_DIR</a></span></code>
 <div class="block">Parameter name for the ZK data directory</div>
 </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/HConstants.html#ZOOKEEPER_MAX_CLIENT_CNXNS">ZOOKEEPER_MAX_CLIENT_CNXNS</a></span></code>
 <div class="block">Parameter name for the limit on concurrent client-side zookeeper
  connections</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZOOKEEPER_QUORUM">ZOOKEEPER_QUORUM</a></span></code>
 <div class="block">Name of ZooKeeper quorum configuration parameter.</div>
 </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/HConstants.html#ZOOKEEPER_TICK_TIME">ZOOKEEPER_TICK_TIME</a></span></code>
 <div class="block">Parameter name for the ZK tick time</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZOOKEEPER_ZNODE_PARENT">ZOOKEEPER_ZNODE_PARENT</a></span></code>
 <div class="block">Parameter name for the root dir in ZK for this cluster</div>
@@ -5194,39 +5198,52 @@
 </dl>
 </li>
 </ul>
-<a name="REPLICATION_SINK_SERVICE_CLASSNAME">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>REPLICATION_SINK_SERVICE_CLASSNAME</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/HConstants.html#line.985">REPLICATION_SINK_SERVICE_CLASSNAME</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SINK_SERVICE_CLASSNAME">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
 <a name="REPLICATION_SERVICE_CLASSNAME_DEFAULT">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SERVICE_CLASSNAME_DEFAULT</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/HConstants.html#line.986">REPLICATION_SERVICE_CLASSNAME_DEFAULT</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/HConstants.html#line.984">REPLICATION_SERVICE_CLASSNAME_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT">Constant Field Values</a></dd>
 </dl>
 </li>
 </ul>
+<a name="REPLICATION_SINK_SERVICE_CLASSNAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>REPLICATION_SINK_SERVICE_CLASSNAME</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/HConstants.html#line.987">REPLICATION_SINK_SERVICE_CLASSNAME</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SINK_SERVICE_CLASSNAME">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</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/HConstants.html#line.988">REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 <a name="REPLICATION_BULKLOAD_ENABLE_KEY">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_BULKLOAD_ENABLE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.988">REPLICATION_BULKLOAD_ENABLE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.990">REPLICATION_BULKLOAD_ENABLE_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_BULKLOAD_ENABLE_KEY">Constant Field Values</a></dd>
@@ -5239,7 +5256,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_BULKLOAD_ENABLE_DEFAULT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.989">REPLICATION_BULKLOAD_ENABLE_DEFAULT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.991">REPLICATION_BULKLOAD_ENABLE_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT">Constant Field Values</a></dd>
@@ -5252,7 +5269,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_CLUSTER_ID</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/HConstants.html#line.991">REPLICATION_CLUSTER_ID</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/HConstants.html#line.993">REPLICATION_CLUSTER_ID</a></pre>
 <div class="block">Replication cluster id of source cluster which uniquely identifies itself with peer cluster</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5266,7 +5283,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_TOTAL_BUFFER_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.997">REPLICATION_SOURCE_TOTAL_BUFFER_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.999">REPLICATION_SOURCE_TOTAL_BUFFER_KEY</a></pre>
 <div class="block">Max total size of buffered entries in all replication peers. It will prevent server getting
  OOM if there are many peers. Default value is 256MB which is four times to default
  replication.source.size.capacity.</div>
@@ -5282,7 +5299,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.999">REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1001">REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT">Constant Field Values</a></dd>
@@ -5295,7 +5312,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</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/HConstants.html#line.1002">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</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/HConstants.html#line.1004">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</a></pre>
 <div class="block">Configuration key for ReplicationSource shipeEdits timeout</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5309,7 +5326,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1004">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1006">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT">Constant Field Values</a></dd>
@@ -5322,7 +5339,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_CONF_DIR</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/HConstants.html#line.1010">REPLICATION_CONF_DIR</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/HConstants.html#line.1012">REPLICATION_CONF_DIR</a></pre>
 <div class="block">Directory where the source cluster file system client configuration are placed which is used by
  sink cluster to copy HFiles from source cluster file system</div>
 <dl>
@@ -5337,7 +5354,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BULKLOAD_MAX_RETRIES_NUMBER</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/HConstants.html#line.1013">BULKLOAD_MAX_RETRIES_NUMBER</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/HConstants.html#line.1015">BULKLOAD_MAX_RETRIES_NUMBER</a></pre>
 <div class="block">Maximum time to retry for a failed bulk load request</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5351,7 +5368,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>KEY_FOR_HOSTNAME_SEEN_BY_MASTER</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/HConstants.html#line.1015">KEY_FOR_HOSTNAME_SEEN_BY_MASTER</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/HConstants.html#line.1017">KEY_FOR_HOSTNAME_SEEN_BY_MASTER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER">Constant Field Values</a></dd>
@@ -5364,7 +5381,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_MASTER_LOGCLEANER_PLUGINS</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/HConstants.html#line.1018">HBASE_MASTER_LOGCLEANER_PLUGINS</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/HConstants.html#line.1020">HBASE_MASTER_LOGCLEANER_PLUGINS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_MASTER_LOGCLEANER_PLUGINS">Constant Field Values</a></dd>
@@ -5377,7 +5394,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_REGION_SPLIT_POLICY_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1021">HBASE_REGION_SPLIT_POLICY_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1023">HBASE_REGION_SPLIT_POLICY_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_REGION_SPLIT_POLICY_KEY">Constant Field Values</a></dd>
@@ -5390,7 +5407,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_RS_NONCES_ENABLED</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/HConstants.html#line.1025">HBASE_RS_NONCES_ENABLED</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/HConstants.html#line.1027">HBASE_RS_NONCES_ENABLED</a></pre>
 <div class="block">Whether nonces are enabled; default is true.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5404,7 +5421,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HFILE_BLOCK_CACHE_SIZE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1030">HFILE_BLOCK_CACHE_SIZE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1032">HFILE_BLOCK_CACHE_SIZE_KEY</a></pre>
 <div class="block">Configuration key for the size of the block cache</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5418,7 +5435,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HFILE_BLOCK_CACHE_SIZE_DEFAULT</h4>
-<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1033">HFILE_BLOCK_CACHE_SIZE_DEFAULT</a></pre>
+<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1035">HFILE_BLOCK_CACHE_SIZE_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT">Constant Field Values</a></dd>
@@ -5431,7 +5448,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD</h4>
-<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1038">HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD</a></pre>
+<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1040">HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD">Constant Field Values</a></dd>
@@ -5445,7 +5462,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_KEY_PATTERN</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 final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1044">CP_HTD_ATTR_KEY_PATTERN</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1046">CP_HTD_ATTR_KEY_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </li>
 </ul>
@@ -5456,7 +5473,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PATTERN</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 final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1057">CP_HTD_ATTR_VALUE_PATTERN</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1059">CP_HTD_ATTR_VALUE_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 <div class="block"><pre>
  Pattern that matches a coprocessor specification. Form is:
@@ -5473,7 +5490,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</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 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/HConstants.html#line.1063">CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</a></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/HConstants.html#line.1065">CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5488,7 +5505,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</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 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/HConstants.html#line.1068">CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</a></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/HConstants.html#line.1070">CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5503,7 +5520,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_PATTERN</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 final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1073">CP_HTD_ATTR_VALUE_PARAM_PATTERN</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1075">CP_HTD_ATTR_VALUE_PARAM_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </li>
 </ul>
@@ -5513,7 +5530,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CP_HTD_ATTR_INCLUSION_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1076">CP_HTD_ATTR_INCLUSION_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1078">CP_HTD_ATTR_INCLUSION_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.CP_HTD_ATTR_INCLUSION_KEY">Constant Field Values</a></dd>
@@ -5526,7 +5543,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SOCKET_RETRY_WAIT_MS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1080">SOCKET_RETRY_WAIT_MS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1082">SOCKET_RETRY_WAIT_MS</a></pre>
 <div class="block">The delay when re-trying a socket operation in a loop (HBASE-4712)</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5540,7 +5557,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOCALHOST</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/HConstants.html#line.1083">LOCALHOST</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/HConstants.html#line.1085">LOCALHOST</a></pre>
 <div class="block">Host name of the local machine</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5554,7 +5571,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CHECKSUM_VERIFICATION</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/HConstants.html#line.1096">HBASE_CHECKSUM_VERIFICATION</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/HConstants.html#line.1098">HBASE_CHECKSUM_VERIFICATION</a></pre>
 <div class="block">If this parameter is set to true, then hbase will read
  data and then verify checksums. Checksum verification
  inside hdfs will be switched off.  However, if the hbase-checksum
@@ -5576,7 +5593,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOCALHOST_IP</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/HConstants.html#line.1099">LOCALHOST_IP</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/HConstants.html#line.1101">LOCALHOST_IP</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.LOCALHOST_IP">Constant Field Values</a></dd>
@@ -5589,7 +5606,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_HANDLER_COUNT</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/HConstants.html#line.1101">REGION_SERVER_HANDLER_COUNT</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/HConstants.html#line.1103">REGION_SERVER_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGION_SERVER_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5602,7 +5619,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_HANDLER_COUNT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1102">DEFAULT_REGION_SERVER_HANDLER_COUNT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1104">DEFAULT_REGION_SERVER_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGION_SERVER_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5615,7 +5632,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</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/HConstants.html#line.1111">REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</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/HConstants.html#line.1113">REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT">Constant Field Values</a></dd>
@@ -5628,7 +5645,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</h4>
-<pre>public static final&nbsp;double <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1113">DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</a></pre>
+<pre>public static final&nbsp;double <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1115">DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT">Constant Field Values</a></dd>
@@ -5641,7 +5658,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</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/HConstants.html#line.1116">REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</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/HConstants.html#line.1118">REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5654,7 +5671,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1118">DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1120">DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5667,7 +5684,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_REPLICATION_HANDLER_COUNT</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/HConstants.html#line.1120">REGION_SERVER_REPLICATION_HANDLER_COUNT</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/HConstants.html#line.1122">REGION_SERVER_REPLICATION_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGION_SERVER_REPLICATION_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5680,7 +5697,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1122">DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1124">DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5693,7 +5710,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_META_TRANSITION_HANDLER_COUNT</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/HConstants.html#line.1125">MASTER_META_TRANSITION_HANDLER_COUNT</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/HConstants.html#line.1127">MASTER_META_TRANSITION_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_META_TRANSITION_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5706,7 +5723,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1127">MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1129">MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT">Constant Field Values</a></dd>
@@ -5719,7 +5736,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>USE_META_REPLICAS</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/HConstants.html#line.1130">USE_META_REPLICAS</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/HConstants.html#line.1132">USE_META_REPLICAS</a></pre>
 <div class="block">Conf key for enabling meta replication</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5733,7 +5750,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_USE_META_REPLICAS</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1131">DEFAULT_USE_META_REPLICAS</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1133">DEFAULT_USE_META_REPLICAS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_USE_META_REPLICAS">Constant Field Values</a></dd>
@@ -5746,7 +5763,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>META_REPLICAS_NUM</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/HConstants.html#line.1132">META_REPLICAS_NUM</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/HConstants.html#line.1134">META_REPLICAS_NUM</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.META_REPLICAS_NUM">Constant Field Values</a></dd>
@@ -5759,7 +5776,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_META_REPLICA_NUM</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1133">DEFAULT_META_REPLICA_NUM</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1135">DEFAULT_META_REPLICA_NUM</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_META_REPLICA_NUM">Constant Field Values</a></dd>
@@ -5772,7 +5789,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BYTES_PER_CHECKSUM</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/HConstants.html#line.1139">BYTES_PER_CHECKSUM</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/HConstants.html#line.1141">BYTES_PER_CHECKSUM</a></pre>
 <div class="block">The name of the configuration parameter that specifies
  the number of bytes in a newly created checksum chunk.</div>
 <dl>
@@ -5787,7 +5804,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CHECKSUM_TYPE_NAME</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/HConstants.html#line.1147">CHECKSUM_TYPE_NAME</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/HConstants.html#line.1149">CHECKSUM_TYPE_NAME</a></pre>
 <div class="block">The name of the configuration parameter that specifies
  the name of an algorithm that is used to compute checksums
  for newly created blocks.</div>
@@ -5803,7 +5820,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ENABLE_DATA_FILE_UMASK</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/HConstants.html#line.1151">ENABLE_DATA_FILE_UMASK</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/HConstants.html#line.1153">ENABLE_DATA_FILE_UMASK</a></pre>
 <div class="block">Enable file permission modification from standard hbase</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5817,7 +5834,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DATA_FILE_UMASK_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1153">DATA_FILE_UMASK_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1155">DATA_FILE_UMASK_KEY</a></pre>
 <div class="block">File permission umask to use when creating hbase data files</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5831,7 +5848,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ENABLE_WAL_COMPRESSION</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/HConstants.html#line.1156">ENABLE_WAL_COMPRESSION</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/HConstants.html#line.1158">ENABLE_WAL_COMPRESSION</a></pre>
 <div class="block">Configuration name of WAL Compression</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5845,7 +5862,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>WAL_STORAGE_POLICY</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/HConstants.html#line.1162">WAL_STORAGE_POLICY</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/HConstants.html#line.1164">WAL_STORAGE_POLICY</a></pre>
 <div class="block">Configuration name of WAL storage policy
  Valid values are: HOT, COLD, WARM, ALL_SSD, ONE_SSD, LAZY_PERSIST
  See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html</div>
@@ -5861,7 +5878,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFER_TO_HDFS_STORAGE_POLICY</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/HConstants.html#line.1167">DEFER_TO_HDFS_STORAGE_POLICY</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/HConstants.html#line.1169">DEFER_TO_HDFS_STORAGE_POLICY</a></pre>
 <div class="block">"NONE" is not a valid storage policy and means we defer the policy to HDFS. @see
  <a href="https://issues.apache.org/jira/browse/HBASE-20691">HBASE-20691</a></div>
 <dl>
@@ -5876,7 +5893,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WAL_STORAGE_POLICY</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/HConstants.html#line.1169">DEFAULT_WAL_STORAGE_POLICY</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/HConstants.html#line.1171">DEFAULT_WAL_STORAGE_POLICY</a></pre>
 <div class="block">By default we defer the WAL storage policy to HDFS</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5890,7 +5907,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>METRICS_RIT_STUCK_WARNING_THRESHOLD</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/HConstants.html#line.1172">METRICS_RIT_STUCK_WARNING_THRESHOLD</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/HConstants.html#line.1174">METRICS_RIT_STUCK_WARNING_THRESHOLD</a></pre>
 <div class="block">Region in Transition metrics threshold time</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5904,7 +5921,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOAD_BALANCER_SLOP_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1175">LOAD_BALANCER_SLOP_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1177">LOAD_BALANCER_SLOP_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.LOAD_BALANCER_SLOP_KEY">Constant Field Values</a></dd>
@@ -5917,7 +5934,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DELIMITER</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1178">DELIMITER</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1180">DELIMITER</a></pre>
 <div class="block">delimiter used between portions of a region name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5931,7 +5948,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>PRIORITY_UNSET</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1186">PRIORITY_UNSET</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1188">PRIORITY_UNSET</a></pre>
 <div class="block">QOS attributes: these attributes are used to demarcate RPC call processing
  by different set of handlers. For example, HIGH_QOS tagged methods are
  handled by high priority handlers.</div>
@@ -5947,7 +5964,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>NORMAL_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1187">NORMAL_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1189">NORMAL_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.NORMAL_QOS">Constant Field Values</a></dd>
@@ -5960,7 +5977,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1188">REPLICATION_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1190">REPLICATION_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_QOS">Constant Field Values</a></dd>
@@ -5973,7 +5990,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLAY_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1189">REPLAY_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1191">REPLAY_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLAY_QOS">Constant Field Values</a></dd>
@@ -5986,7 +6003,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>QOS_THRESHOLD</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1190">QOS_THRESHOLD</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1192">QOS_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.QOS_THRESHOLD">Constant Field Values</a></dd>
@@ -5999,7 +6016,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ADMIN_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1191">ADMIN_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1193">ADMIN_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.ADMIN_QOS">Constant Field Values</a></dd>
@@ -6012,7 +6029,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HIGH_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1192">HIGH_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1194">HIGH_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HIGH_QOS">Constant Field Values</a></dd>
@@ -6025,7 +6042,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SYSTEMTABLE_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1193">SYSTEMTABLE_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1195">SYSTEMTABLE_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SYSTEMTABLE_QOS">Constant Field Values</a></dd>
@@ -6039,7 +6056,7 @@
 <li class="blockList">
 <h4>META_QOS</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 final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1199">META_QOS</a></pre>
+public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1201">META_QOS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">the name "META_QOS" is a bit ambiguous, actually only meta region transition can
              use this priority, and you should not use this directly. Will be removed in 3.0.0.</span></div>
 <dl>
@@ -6054,7 +6071,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HFILE_ARCHIVE_DIRECTORY</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/HConstants.html#line.1202">HFILE_ARCHIVE_DIRECTORY</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/HConstants.html#line.1204">HFILE_ARCHIVE_DIRECTORY</a></pre>
 <div class="block">Directory under /hbase where archived hfiles are stored</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6068,7 +6085,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_DIR_NAME</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/HConstants.html#line.1209">SNAPSHOT_DIR_NAME</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/HConstants.html#line.1211">SNAPSHOT_DIR_NAME</a></pre>
 <div class="block">Name of the directory to store all snapshots. See SnapshotDescriptionUtils for
  remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and
  uni-directional.</div>
@@ -6084,7 +6101,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>OLD_SNAPSHOT_DIR_NAME</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/HConstants.html#line.1212">OLD_SNAPSHOT_DIR_NAME</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/HConstants.html#line.1214">OLD_SNAPSHOT_DIR_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.OLD_SNAPSHOT_DIR_NAME">Constant Field Values</a></dd>
@@ -6097,7 +6114,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_TEMP_DIRECTORY</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/HConstants.html#line.1215">HBASE_TEMP_DIRECTORY</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/HConstants.html#line.1217">HBASE_TEMP_DIRECTORY</a></pre>
 <div class="block">Temporary directory used for table creation and deletion</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6111,7 +6128,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONSERVER_METRICS_PERIOD</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/HConstants.html#line.1219">REGIONSERVER_METRICS_PERIOD</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/HConstants.html#line.1221">REGIONSERVER_METRICS_PERIOD</a></pre>
 <div class="block">The period (in milliseconds) between computing region server point in time metrics</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6125,7 +6142,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGIONSERVER_METRICS_PERIOD</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1220">DEFAULT_REGIONSERVER_METRICS_PERIOD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1222">DEFAULT_REGIONSERVER_METRICS_PERIOD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGIONSERVER_METRICS_PERIOD">Constant Field Values</a></dd>
@@ -6138,7 +6155,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_NON_TABLE_DIRS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1222">HBASE_NON_TABLE_DIRS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1224">HBASE_NON_TABLE_DIRS</a></pre>
 <div class="block">Directories that are not HBase table directories</div>
 </li>
 </ul>
@@ -6149,7 +6166,7 @@
 <li class="blockList">
 <h4>HBASE_NON_USER_TABLE_DIRS</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 final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1232">HBASE_NON_USER_TABLE_DIRS</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1234">HBASE_NON_USER_TABLE_DIRS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since hbase-2.3.0; no replacement as not used any more (internally at least)</span></div>
 <div class="block">Directories that are not HBase user table directories.</div>
 </li>
@@ -6160,7 +6177,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEALTH_SCRIPT_LOC</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/HConstants.html#line.1238">HEALTH_SCRIPT_LOC</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/HConstants.html#line.1240">HEALTH_SCRIPT_LOC</a></pre>
 <div class="block">Health script related settings.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6174,7 +6191,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEALTH_SCRIPT_TIMEOUT</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/HConstants.html#line.1239">HEALTH_SCRIPT_TIMEOUT</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/HConstants.html#line.1241">HEALTH_SCRIPT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HEALTH_SCRIPT_TIMEOUT">Constant Field Values</a></dd>
@@ -6187,7 +6204,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEALTH_CHORE_WAKE_FREQ</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/HConstants.html#line.1240">HEALTH_CHORE_WAKE_FREQ</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/HConstants.html#line.1242">HEALTH_CHORE_WAKE_FREQ</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HEALTH_CHORE_WAKE_FREQ">Constant Field Values</a></dd>
@@ -6200,7 +6217,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HEALTH_SCRIPT_TIMEOUT</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1242">DEFAULT_HEALTH_SCRIPT_TIMEOUT</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1244">DEFAULT_HEALTH_SCRIPT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HEALTH_SCRIPT_TIMEOUT">Constant Field Values</a></dd>
@@ -6213,7 +6230,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEALTH_FAILURE_THRESHOLD</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/HConstants.html#line.1246">HEALTH_FAILURE_THRESHOLD</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/HConstants.html#line.1248">HEALTH_FAILURE_THRESHOLD</a></pre>
 <div class="block">The maximum number of health check failures a server can encounter consecutively.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6227,7 +6244,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HEALTH_FAILURE_THRESHOLD</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1248">DEFAULT_HEALTH_FAILURE_THRESHOLD</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1250">DEFAULT_HEALTH_FAILURE_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HEALTH_FAILURE_THRESHOLD">Constant Field Values</a></dd>
@@ -6240,7 +6257,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>EXECUTOR_STATUS_COLLECT_ENABLED</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/HConstants.html#line.1250">EXECUTOR_STATUS_COLLECT_ENABLED</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/HConstants.html#line.1252">EXECUTOR_STATUS_COLLECT_ENABLED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.EXECUTOR_STATUS_COLLECT_ENABLED">Constant Field Values</a></dd>
@@ -6253,7 +6270,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1252">DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1254">DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED">Constant Field Values</a></dd>
@@ -6266,7 +6283,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_PUBLISHED</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/HConstants.html#line.1258">STATUS_PUBLISHED</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/HConstants.html#line.1260">STATUS_PUBLISHED</a></pre>
 <div class="block">Setting to activate, or not, the publication of the status by the master. Default
   notification is by a multicast message.</div>
 <dl>
@@ -6281,7 +6298,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_PUBLISHED_DEFAULT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1259">STATUS_PUBLISHED_DEFAULT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1261">STATUS_PUBLISHED_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.STATUS_PUBLISHED_DEFAULT">Constant Field Values</a></dd>
@@ -6294,7 +6311,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_ADDRESS</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/HConstants.html#line.1266">STATUS_MULTICAST_ADDRESS</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/HConstants.html#line.1268">STATUS_MULTICAST_ADDRESS</a></pre>
 <div class="block">IP to use for the multicast status messages between the master and the clients.
  The default address is chosen as one among others within the ones suitable for multicast
  messages.</div>
@@ -6310,7 +6327,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATUS_MULTICAST_ADDRESS</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/HConstants.html#line.1267">DEFAULT_STATUS_MULTICAST_ADDRESS</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/HConstants.html#line.1269">DEFAULT_STATUS_MULTICAST_ADDRESS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STATUS_MULTICAST_ADDRESS">Constant Field Values</a></dd>
@@ -6323,7 +6340,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_BIND_ADDRESS</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/HConstants.html#line.1274">STATUS_MULTICAST_BIND_ADDRESS</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/HConstants.html#line.1276">STATUS_MULTICAST_BIND_ADDRESS</a></pre>
 <div class="block">The address to use for binding the local socket for receiving multicast. Defaults to
  0.0.0.0.</div>
 <dl>
@@ -6339,7 +6356,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATUS_MULTICAST_BIND_ADDRESS</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/HConstants.html#line.1276">DEFAULT_STATUS_MULTICAST_BIND_ADDRESS</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/HConstants.html#line.1278">DEFAULT_STATUS_MULTICAST_BIND_ADDRESS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STATUS_MULTICAST_BIND_ADDRESS">Constant Field Values</a></dd>
@@ -6352,7 +6369,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_PORT</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/HConstants.html#line.1281">STATUS_MULTICAST_PORT</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/HConstants.html#line.1283">STATUS_MULTICAST_PORT</a></pre>
 <div class="block">The port to use for the multicast messages.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6366,7 +6383,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATUS_MULTICAST_PORT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1282">DEFAULT_STATUS_MULTICAST_PORT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1284">DEFAULT_STATUS_MULTICAST_PORT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STATUS_MULTICAST_PORT">Constant Field Values</a></dd>
@@ -6379,7 +6396,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_NI_NAME</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/HConstants.html#line.1287">STATUS_MULTICAST_NI_NAME</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/HConstants.html#line.1289">STATUS_MULTICAST_NI_NAME</a></pre>
 <div class="block">The network interface name to use for the multicast messages.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6393,7 +6410,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</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/HConstants.html#line.1292">STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</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/HConstants.html#line.1294">STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></pre>
 <div class="block">The address to use for binding the local socket for sending multicast. Defaults to 0.0.0.0.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6407,7 +6424,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</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/HConstants.html#line.1294">DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</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/HConstants.html#line.1296">DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">Constant Field Values</a></dd>
@@ -6420,7 +6437,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_NONCE</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1296">NO_NONCE</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1298">NO_NONCE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.NO_NONCE">Constant Field Values</a></dd>
@@ -6433,7 +6450,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CIPHER_AES</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/HConstants.html#line.1299">CIPHER_AES</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/HConstants.html#line.1301">CIPHER_AES</a></pre>
 <div class="block">Default cipher for encryption</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6447,7 +6464,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_CIPHERPROVIDER_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1302">CRYPTO_CIPHERPROVIDER_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1304">CRYPTO_CIPHERPROVIDER_CONF_KEY</a></pre>
 <div class="block">Configuration key for the crypto algorithm provider, a class name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6461,7 +6478,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_KEYPROVIDER_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1305">CRYPTO_KEYPROVIDER_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1307">CRYPTO_KEYPROVIDER_CONF_KEY</a></pre>
 <div class="block">Configuration key for the crypto key provider, a class name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6475,7 +6492,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_KEYPROVIDER_PARAMETERS_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1308">CRYPTO_KEYPROVIDER_PARAMETERS_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1310">CRYPTO_KEYPROVIDER_PARAMETERS_KEY</a></pre>
 <div class="block">Configuration key for the crypto key provider parameters</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6489,7 +6506,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_MASTERKEY_NAME_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1312">CRYPTO_MASTERKEY_NAME_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1314">CRYPTO_MASTERKEY_NAME_CONF_KEY</a></pre>
 <div class="block">Configuration key for the name of the master key for the cluster, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6503,7 +6520,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1315">CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1317">CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY</a></pre>
 <div class="block">Configuration key for the name of the alternate master key for the cluster, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6517,7 +6534,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_WAL_ALGORITHM_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1319">CRYPTO_WAL_ALGORITHM_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1321">CRYPTO_WAL_ALGORITHM_CONF_KEY</a></pre>
 <div class="block">Configuration key for the algorithm to use when encrypting the WAL, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6531,7 +6548,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_WAL_KEY_NAME_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1322">CRYPTO_WAL_KEY_NAME_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1324">CRYPTO_WAL_KEY_NAME_CONF_KEY</a></pre>
 <div class="block">Configuration key for the name of the master WAL encryption key for the cluster, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6545,7 +6562,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_KEY_ALGORITHM_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1325">CRYPTO_KEY_ALGORITHM_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1327">CRYPTO_KEY_ALGORITHM_CONF_KEY</a></pre>
 <div class="block">Configuration key for the algorithm used for creating jks key, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6559,7 +6576,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1328">CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1330">CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY</a></pre>
 <div class="block">Configuration key for the name of the alternate cipher algorithm for the cluster, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6573,7 +6590,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ENABLE_WAL_ENCRYPTION</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/HConstants.html#line.1332">ENABLE_WAL_ENCRYPTION</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/HConstants.html#line.1334">ENABLE_WAL_ENCRYPTION</a></pre>
 <div class="block">Configuration key for enabling WAL encryption, a boolean</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6587,7 +6604,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>RPC_CODEC_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1335">RPC_CODEC_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1337">RPC_CODEC_CONF_KEY</a></pre>
 <div class="block">Configuration key for setting RPC codec class name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6601,7 +6618,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_CODEC_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1338">REPLICATION_CODEC_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1340">REPLICATION_CODEC_CONF_KEY</a></pre>
 <div class="block">Configuration key for setting replication codec class name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6615,7 +6632,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_MAXTHREADS_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1341">REPLICATION_SOURCE_MAXTHREADS_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1343">REPLICATION_SOURCE_MAXTHREADS_KEY</a></pre>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6630,7 +6647,7 @@
 <li class="blockList">
 <h4>REPLICATION_DROP_ON_DELETED_TABLE_KEY</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-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/HConstants.html#line.1349">REPLICATION_DROP_ON_DELETED_TABLE_KEY</a></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/HConstants.html#line.1351">REPLICATION_DROP_ON_DELETED_TABLE_KEY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">moved it into HBaseInterClusterReplicationEndpoint</span></div>
 <div class="block">Drop edits for tables that been deleted from the replication source and target</div>
 <dl>
@@ -6645,7 +6662,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_MAXTHREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1353">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1355">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></pre>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6659,7 +6676,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SPLITLOG_MANAGER_TIMEOUT</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/HConstants.html#line.1356">HBASE_SPLITLOG_MANAGER_TIMEOUT</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/HConstants.html#line.1358">HBASE_SPLITLOG_MANAGER_TIMEOUT</a></pre>
 <div class="block">Configuration key for SplitLog manager timeout</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6673,7 +6690,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BUCKET_CACHE_IOENGINE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1372">BUCKET_CACHE_IOENGINE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1374">BUCKET_CACHE_IOENGINE_KEY</a></pre>
 <div class="block">Current ioengine options in include: heap, offheap and file:PATH (where PATH is the path
  to the file that will host the file-based cache.  See BucketCache#getIOEngineFromName() for
  list of supported ioengine options.
@@ -6690,7 +6707,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BUCKET_CACHE_SIZE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1379">BUCKET_CACHE_SIZE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1381">BUCKET_CACHE_SIZE_KEY</a></pre>
 <div class="block">When using bucket cache, this is a float that EITHER represents a percentage of total heap
  memory size to give to the cache (if &lt; 1.0) OR, it is the capacity in
  megabytes of the cache.</div>
@@ -6707,7 +6724,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_MODE_ENABLED</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 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/HConstants.html#line.1390">HBASE_CLIENT_FAST_FAIL_MODE_ENABLED</a></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/HConstants.html#line.1392">HBASE_CLIENT_FAST_FAIL_MODE_ENABLED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <div class="block">Config for enabling/disabling the fast fail mode.</div>
@@ -6724,7 +6741,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT</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 final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1398">HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT</a></pre>
+public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1400">HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6740,7 +6757,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS</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 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/HConstants.html#line.1405">HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS</a></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/HConstants.html#line.1407">HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6756,7 +6773,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT</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 final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1413">HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT</a></pre>
+public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1415">HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6772,7 +6789,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS</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 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/HConstants.html#line.1420">HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS</a></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/HConstants.html#line.1422">HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6788,7 +6805,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT</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 final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1428">HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT</a></pre>
+public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1430">HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6804,7 +6821,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS</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 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/HConstants.html#line.1435">HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS</a></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/HConstants.html#line.1437">HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6820,7 +6837,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT</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 final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1443">HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT</a></pre>
+public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1445">HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6836,7 +6853,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL</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 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/HConstants.html#line.1450">HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL</a></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/HConstants.html#line.1452">HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6852,7 +6869,7 @@
 <li class="blockList">
 <h4>HBASE_SPLIT_WAL_COORDINATED_BY_ZK</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 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/HConstants.html#line.1458">HBASE_SPLIT_WAL_COORDINATED_BY_ZK</a></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/HConstants.html#line.1460">HBASE_SPLIT_WAL_COORDINATED_BY_ZK</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and in 3.0.0, to be removed in 4.0.0, replaced by procedure-based
    distributed WAL splitter; see SplitWALManager.</span></div>
 <dl>
@@ -6868,7 +6885,7 @@
 <li class="blockList">
 <h4>DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK</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 final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1464">DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK</a></pre>
+public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1466">DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and in 3.0.0, to be removed in 4.0.0.</span></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6882,7 +6899,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SPLIT_WAL_MAX_SPLITTER</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/HConstants.html#line.1466">HBASE_SPLIT_WAL_MAX_SPLITTER</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/HConstants.html#line.1468">HBASE_SPLIT_WAL_MAX_SPLITTER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_SPLIT_WAL_MAX_SPLITTER">Constant Field Values</a></dd>
@@ -6895,7 +6912,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1468">DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1470">DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER">Constant Field Values</a></dd>
@@ -6908,7 +6925,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ENABLE_CLIENT_BACKPRESSURE</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/HConstants.html#line.1472">ENABLE_CLIENT_BACKPRESSURE</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/HConstants.html#line.1474">ENABLE_CLIENT_BACKPRESSURE</a></pre>
 <div class="block">Config key for if the server should send backpressure and if the client should listen to
  that backpressure from the server</div>
 <dl>
@@ -6923,7 +6940,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ENABLE_CLIENT_BACKPRESSURE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1473">DEFAULT_ENABLE_CLIENT_BACKPRESSURE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1475">DEFAULT_ENABLE_CLIENT_BACKPRESSURE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_ENABLE_CLIENT_BACKPRESSURE">Constant Field Values</a></dd>
@@ -6936,7 +6953,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEAP_OCCUPANCY_LOW_WATERMARK_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1475">HEAP_OCCUPANCY_LOW_WATERMARK_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1477">HEAP_OCCUPANCY_LOW_WATERMARK_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HEAP_OCCUPANCY_LOW_WATERMARK_KEY">Constant Field Values</a></dd>
@@ -6949,7 +6966,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK</h4>
-<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1477">DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK</a></pre>
+<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1479">DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK">Constant Field Values</a></dd>
@@ -6962,7 +6979,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEAP_OCCUPANCY_HIGH_WATERMARK_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1478">HEAP_OCCUPANCY_HIGH_WATERMARK_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1480">HEAP_OCCUPANCY_HIGH_WATERMARK_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HEAP_OCCUPANCY_HIGH_WATERMARK_KEY">Constant Field Values</a></dd>
@@ -6975,7 +6992,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK</h4>
-<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1480">DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK</a></pre>
+<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1482">DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK">Constant Field Values</a></dd>
@@ -6988,7 +7005,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SPLIT_THREADS_MAX</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/HConstants.html#line.1486">REGION_SPLIT_THREADS_MAX</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/HConstants.html#line.1488">REGION_SPLIT_THREADS_MAX</a></pre>
 <div class="block">The max number of threads used for splitting storefiles in parallel during
  the region split process.</div>
 <dl>
@@ -7003,7 +7020,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_DATA_TTL_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1491">HBASE_CANARY_WRITE_DATA_TTL_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1493">HBASE_CANARY_WRITE_DATA_TTL_KEY</a></pre>
 <div class="block">Canary config keys</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7017,7 +7034,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1493">HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1495">HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY">Constant Field Values</a></dd>
@@ -7030,7 +7047,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1496">HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1498">HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY">Constant Field Values</a></dd>
@@ -7043,7 +7060,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_VALUE_SIZE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1499">HBASE_CANARY_WRITE_VALUE_SIZE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1501">HBASE_CANARY_WRITE_VALUE_SIZE_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY">Constant Field Values</a></dd>
@@ -7056,7 +7073,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1501">HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1503">HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY">Constant Field Values</a></dd>
@@ -7069,7 +7086,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_READ_RAW_SCAN_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1504">HBASE_CANARY_READ_RAW_SCAN_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1506">HBASE_CANARY_READ_RAW_SCAN_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_READ_RAW_SCAN_KEY">Constant Field Values</a></dd>
@@ -7082,7 +7099,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_READ_ALL_CF</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/HConstants.html#line.1506">HBASE_CANARY_READ_ALL_CF</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/HConstants.html#line.1508">HBASE_CANARY_READ_ALL_CF</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_READ_ALL_CF">Constant Field Values</a></dd>
@@ -7095,7 +7112,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ZK_CLIENT_KEYTAB_FILE</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/HConstants.html#line.1510">ZK_CLIENT_KEYTAB_FILE</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/HConstants.html#line.1512">ZK_CLIENT_KEYTAB_FILE</a></pre>
 <div class="block">Configuration keys for programmatic JAAS configuration for secured ZK interaction</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7109,7 +7126,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ZK_CLIENT_KERBEROS_PRINCIPAL</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/HConstants.html#line.1511">ZK_CLIENT_KERBEROS_PRINCIPAL</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/HConstants.html#line.1513">ZK_CLIENT_KERBEROS_PRINCIPAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL">Constant Field Values</a></dd>
@@ -7122,7 +7139,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ZK_SERVER_KEYTAB_FILE</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/HConstants.html#line.1513">ZK_SERVER_KEYTAB_FILE</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/HConstants.html#line.1515">ZK_SERVER_KEYTAB_FILE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.ZK_SERVER_KEYTAB_FILE">Constant Field Values</a></dd>
@@ -7135,7 +7152,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ZK_SERVER_KERBEROS_PRINCIPAL</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/HConstants.html#line.1514">ZK_SERVER_KERBEROS_PRINCIPAL</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/HConstants.html#line.1516">ZK_SERVER_KERBEROS_PRINCIPAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.ZK_SERVER_KERBEROS_PRINCIPAL">Constant Field Values</a></dd>
@@ -7148,7 +7165,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TEMPORARY_FS_DIRECTORY_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1518">TEMPORARY_FS_DIRECTORY_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1520">TEMPORARY_FS_DIRECTORY_KEY</a></pre>
 <div class="block">Config key for hbase temporary directory in hdfs</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7162,7 +7179,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_TEMPORARY_HDFS_DIRECTORY</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/HConstants.html#line.1525">DEFAULT_TEMPORARY_HDFS_DIRECTORY</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/HConstants.html#line.1527">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></pre>
 <div class="block">Don't use it! This'll get you the wrong path in a secure cluster.
  Use FileSystem.getHomeDirectory() or
  "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()</div>
@@ -7174,7 +7191,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</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/HConstants.html#line.1528">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</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/HConstants.html#line.1530">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">Constant Field Values</a></dd>
@@ -7187,7 +7204,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1530">DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1532">DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">Constant Field Values</a></dd>
@@ -7200,7 +7217,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#line.1532">SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#line.1534">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME">Constant Field Values</a></dd>
@@ -7213,7 +7230,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#line.1534">DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#line.1536">DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME">Constant Field Values</a></dd>
@@ -7226,7 +7243,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_LOSSY_COUNTING_ERROR_RATE</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/HConstants.html#line.1537">DEFAULT_LOSSY_COUNTING_ERROR_RATE</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/HConstants.html#line.1539">DEFAULT_LOSSY_COUNTING_ERROR_RATE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_LOSSY_COUNTING_ERROR_RATE">Constant Field Values</a></dd>
@@ -7239,7 +7256,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_IMPLEMENTED</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/HConstants.html#line.1539">NOT_IMPLEMENTED</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/HConstants.html#line.1541">NOT_IMPLEMENTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.NOT_IMPLEMENTED">Constant Field Values</a></dd>
@@ -7252,7 +7269,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_TTL</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1542">DEFAULT_SNAPSHOT_TTL</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1544">DEFAULT_SNAPSHOT_TTL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_TTL">Constant Field Values</a></dd>
@@ -7265,7 +7282,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_TTL_CONFIG_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1545">DEFAULT_SNAPSHOT_TTL_CONFIG_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1547">DEFAULT_SNAPSHOT_TTL_CONFIG_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_TTL_CONFIG_KEY">Constant Field Values</a></dd>
@@ -7278,7 +7295,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STORE_FILE_REF_COUNT_THRESHOLD</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/HConstants.html#line.1548">STORE_FILE_REF_COUNT_THRESHOLD</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/HConstants.html#line.1550">STORE_FILE_REF_COUNT_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.STORE_FILE_REF_COUNT_THRESHOLD">Constant Field Values</a></dd>
@@ -7291,7 +7308,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1552">DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1554">DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD">Constant Field Values</a></dd>
@@ -7304,7 +7321,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONS_RECOVERY_INTERVAL</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/HConstants.html#line.1554">REGIONS_RECOVERY_INTERVAL</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/HConstants.html#line.1556">REGIONS_RECOVERY_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGIONS_RECOVERY_INTERVAL">Constant Field Values</a></dd>
@@ -7317,7 +7334,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGIONS_RECOVERY_INTERVAL</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1557">DEFAULT_REGIONS_RECOVERY_INTERVAL</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1559">DEFAULT_REGIONS_RECOVERY_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGIONS_RECOVERY_INTERVAL">Constant Field Values</a></dd>
@@ -7330,7 +7347,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_OPEN_REGION_THREADS</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/HConstants.html#line.1562">MASTER_OPEN_REGION_THREADS</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/HConstants.html#line.1564">MASTER_OPEN_REGION_THREADS</a></pre>
 <div class="block">Configurations for master executor services.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7344,7 +7361,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_OPEN_REGION_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1564">MASTER_OPEN_REGION_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1566">MASTER_OPEN_REGION_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_OPEN_REGION_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7357,7 +7374,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_CLOSE_REGION_THREADS</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/HConstants.html#line.1566">MASTER_CLOSE_REGION_THREADS</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/HConstants.html#line.1568">MASTER_CLOSE_REGION_THREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_CLOSE_REGION_THREADS">Constant Field Values</a></dd>
@@ -7370,7 +7387,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_CLOSE_REGION_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1568">MASTER_CLOSE_REGION_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1570">MASTER_CLOSE_REGION_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_CLOSE_REGION_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7383,7 +7400,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_SERVER_OPERATIONS_THREADS</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/HConstants.html#line.1570">MASTER_SERVER_OPERATIONS_THREADS</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/HConstants.html#line.1572">MASTER_SERVER_OPERATIONS_THREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_SERVER_OPERATIONS_THREADS">Constant Field Values</a></dd>
@@ -7396,7 +7413,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_SERVER_OPERATIONS_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1572">MASTER_SERVER_OPERATIONS_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1574">MASTER_SERVER_OPERATIONS_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_SERVER_OPERATIONS_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7409,7 +7426,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_META_SERVER_OPERATIONS_THREADS</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/HConstants.html#line.1574">MASTER_META_SERVER_OPERATIONS_THREADS</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/HConstants.html#line.1576">MASTER_META_SERVER_OPERATIONS_THREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_META_SERVER_OPERATIONS_THREADS">Constant Field Values</a></dd>
@@ -7422,7 +7439,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1576">MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1578">MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7435,7 +7452,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_LOG_REPLAY_OPS_THREADS</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/HConstants.html#line.1578">MASTER_LOG_REPLAY_OPS_THREADS</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/HConstants.html#line.1580">MASTER_LOG_REPLAY_OPS_THREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_LOG_REPLAY_OPS_THREADS">Constant Field Values</a></dd>
@@ -7448,7 +7465,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1580">MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1582">MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7461,7 +7478,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SLOW_LOG_RING_BUFFER_SIZE</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1582">DEFAULT_SLOW_LOG_RING_BUFFER_SIZE</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1584">DEFAULT_SLOW_LOG_RING_BUFFER_SIZE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SLOW_LOG_RING_BUFFER_SIZE">Constant Field Values</a></dd>
@@ -7474,7 +7491,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_LOG_BUFFER_ENABLED_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1584">SLOW_LOG_BUFFER_ENABLED_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1586">SLOW_LOG_BUFFER_ENABLED_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SLOW_LOG_BUFFER_ENABLED_KEY">Constant Field Values</a></dd>
@@ -7487,7 +7504,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ONLINE_LOG_PROVIDER_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1586">DEFAULT_ONLINE_LOG_PROVIDER_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1588">DEFAULT_ONLINE_LOG_PROVIDER_ENABLED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED">Constant Field Values</a></dd>
@@ -7500,7 +7517,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOWLOG_INFO_FAMILY</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1592">SLOWLOG_INFO_FAMILY</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1594">SLOWLOG_INFO_FAMILY</a></pre>
 <div class="block">The slowlog info family</div>
 </li>
 </ul>
@@ -7510,7 +7527,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_LOG_SYS_TABLE_ENABLED_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1594">SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1596">SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY">Constant Field Values</a></dd>
@@ -7523,7 +7540,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1596">DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1598">DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY">Constant Field Values</a></dd>
@@ -7536,7 +7553,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BATCH_ROWS_THRESHOLD_NAME</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/HConstants.html#line.1601">BATCH_ROWS_THRESHOLD_NAME</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/HConstants.html#line.1603">BATCH_ROWS_THRESHOLD_NAME</a></pre>
 <div class="block">Number of rows in a batch operation above which a warning will be logged.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7550,7 +7567,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BATCH_ROWS_THRESHOLD_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1606">BATCH_ROWS_THRESHOLD_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1608">BATCH_ROWS_THRESHOLD_DEFAULT</a></pre>
 <div class="block">Default value of <a href="../../../../org/apache/hadoop/hbase/HConstants.html#BATCH_ROWS_THRESHOLD_NAME"><code>BATCH_ROWS_THRESHOLD_NAME</code></a></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html b/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html
index abccdb5..1e32c44 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/HConstants.html
@@ -989,634 +989,636 @@
 <span class="sourceLineNo">981</span>   */<a name="line.981"></a>
 <span class="sourceLineNo">982</span>  public static final String<a name="line.982"></a>
 <span class="sourceLineNo">983</span>      REPLICATION_SOURCE_SERVICE_CLASSNAME = "hbase.replication.source.service";<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  public static final String<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      REPLICATION_SINK_SERVICE_CLASSNAME = "hbase.replication.sink.service";<a name="line.985"></a>
-<span class="sourceLineNo">986</span>  public static final String REPLICATION_SERVICE_CLASSNAME_DEFAULT =<a name="line.986"></a>
-<span class="sourceLineNo">987</span>    "org.apache.hadoop.hbase.replication.regionserver.Replication";<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  public static final String REPLICATION_BULKLOAD_ENABLE_KEY = "hbase.replication.bulkload.enabled";<a name="line.988"></a>
-<span class="sourceLineNo">989</span>  public static final boolean REPLICATION_BULKLOAD_ENABLE_DEFAULT = false;<a name="line.989"></a>
-<span class="sourceLineNo">990</span>  /** Replication cluster id of source cluster which uniquely identifies itself with peer cluster */<a name="line.990"></a>
-<span class="sourceLineNo">991</span>  public static final String REPLICATION_CLUSTER_ID = "hbase.replication.cluster.id";<a name="line.991"></a>
-<span class="sourceLineNo">992</span>  /**<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * Max total size of buffered entries in all replication peers. It will prevent server getting<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * OOM if there are many peers. Default value is 256MB which is four times to default<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * replication.source.size.capacity.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   */<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  public static final String REPLICATION_SOURCE_TOTAL_BUFFER_KEY = "replication.total.buffer.quota";<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>  public static final int REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT = 256 * 1024 * 1024;<a name="line.999"></a>
+<span class="sourceLineNo">984</span>  public static final String REPLICATION_SERVICE_CLASSNAME_DEFAULT =<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    "org.apache.hadoop.hbase.replication.regionserver.Replication";<a name="line.985"></a>
+<span class="sourceLineNo">986</span>  public static final String<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      REPLICATION_SINK_SERVICE_CLASSNAME = "hbase.replication.sink.service";<a name="line.987"></a>
+<span class="sourceLineNo">988</span>  public static final String REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT =<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    "org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl";<a name="line.989"></a>
+<span class="sourceLineNo">990</span>  public static final String REPLICATION_BULKLOAD_ENABLE_KEY = "hbase.replication.bulkload.enabled";<a name="line.990"></a>
+<span class="sourceLineNo">991</span>  public static final boolean REPLICATION_BULKLOAD_ENABLE_DEFAULT = false;<a name="line.991"></a>
+<span class="sourceLineNo">992</span>  /** Replication cluster id of source cluster which uniquely identifies itself with peer cluster */<a name="line.992"></a>
+<span class="sourceLineNo">993</span>  public static final String REPLICATION_CLUSTER_ID = "hbase.replication.cluster.id";<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  /**<a name="line.994"></a>
+<span class="sourceLineNo">995</span>   * Max total size of buffered entries in all replication peers. It will prevent server getting<a name="line.995"></a>
+<span class="sourceLineNo">996</span>   * OOM if there are many peers. Default value is 256MB which is four times to default<a name="line.996"></a>
+<span class="sourceLineNo">997</span>   * replication.source.size.capacity.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>   */<a name="line.998"></a>
+<span class="sourceLineNo">999</span>  public static final String REPLICATION_SOURCE_TOTAL_BUFFER_KEY = "replication.total.buffer.quota";<a name="line.999"></a>
 <span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>  /** Configuration key for ReplicationSource shipeEdits timeout */<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  public static final String REPLICATION_SOURCE_SHIPEDITS_TIMEOUT =<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      "replication.source.shipedits.timeout";<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>  public static final int REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT = 60000;<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>  /**<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>   * Directory where the source cluster file system client configuration are placed which is used by<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>   * sink cluster to copy HFiles from source cluster file system<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>   */<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>  public static final String REPLICATION_CONF_DIR = "hbase.replication.conf.dir";<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span><a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>  /** Maximum time to retry for a failed bulk load request */<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>  public static final String BULKLOAD_MAX_RETRIES_NUMBER = "hbase.bulkload.retries.number";<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span><a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>  public static final String KEY_FOR_HOSTNAME_SEEN_BY_MASTER =<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    "hbase.regionserver.hostname.seen.by.master";<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>  public static final String HBASE_MASTER_LOGCLEANER_PLUGINS =<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      "hbase.master.logcleaner.plugins";<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  public static final String HBASE_REGION_SPLIT_POLICY_KEY =<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    "hbase.regionserver.region.split.policy";<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>  /** Whether nonces are enabled; default is true. */<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  public static final String HBASE_RS_NONCES_ENABLED = "hbase.regionserver.nonces.enabled";<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  /**<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   * Configuration key for the size of the block cache<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>   */<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>  public static final String HFILE_BLOCK_CACHE_SIZE_KEY =<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>    "hfile.block.cache.size";<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>  public static final float HFILE_BLOCK_CACHE_SIZE_DEFAULT = 0.4f;<a name="line.1033"></a>
+<span class="sourceLineNo">1001</span>  public static final int REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT = 256 * 1024 * 1024;<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span><a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>  /** Configuration key for ReplicationSource shipeEdits timeout */<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>  public static final String REPLICATION_SOURCE_SHIPEDITS_TIMEOUT =<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      "replication.source.shipedits.timeout";<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>  public static final int REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT = 60000;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span><a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>  /**<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * Directory where the source cluster file system client configuration are placed which is used by<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   * sink cluster to copy HFiles from source cluster file system<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>   */<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  public static final String REPLICATION_CONF_DIR = "hbase.replication.conf.dir";<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span><a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>  /** Maximum time to retry for a failed bulk load request */<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>  public static final String BULKLOAD_MAX_RETRIES_NUMBER = "hbase.bulkload.retries.number";<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span><a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>  public static final String KEY_FOR_HOSTNAME_SEEN_BY_MASTER =<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    "hbase.regionserver.hostname.seen.by.master";<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span><a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>  public static final String HBASE_MASTER_LOGCLEANER_PLUGINS =<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      "hbase.master.logcleaner.plugins";<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span><a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  public static final String HBASE_REGION_SPLIT_POLICY_KEY =<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    "hbase.regionserver.region.split.policy";<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span><a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>  /** Whether nonces are enabled; default is true. */<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>  public static final String HBASE_RS_NONCES_ENABLED = "hbase.regionserver.nonces.enabled";<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span><a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>  /**<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * Configuration key for the size of the block cache<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   */<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>  public static final String HFILE_BLOCK_CACHE_SIZE_KEY =<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    "hfile.block.cache.size";<a name="line.1033"></a>
 <span class="sourceLineNo">1034</span><a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>  /*<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    * Minimum percentage of free heap necessary for a successful cluster startup.<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    */<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>  public static final float HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD = 0.2f;<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  /**<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>   */<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  @Deprecated<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>  public static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  /**<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>   * &lt;pre&gt;<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   * &lt;/pre&gt;<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>   */<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  @Deprecated<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  public static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>  /**<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   */<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>  @Deprecated<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>  /**<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>  @Deprecated<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  /**<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   */<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>  @Deprecated<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>  public static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>  public static final String CP_HTD_ATTR_INCLUSION_KEY =<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      "hbase.coprocessor.classloader.included.classes";<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span><a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>  /** The delay when re-trying a socket operation in a loop (HBASE-4712) */<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  public static final int SOCKET_RETRY_WAIT_MS = 200;<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>  /** Host name of the local machine */<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>  public static final String LOCALHOST = "localhost";<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span><a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>  /**<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>   * If this parameter is set to true, then hbase will read<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>   * data and then verify checksums. Checksum verification<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>   * inside hdfs will be switched off.  However, if the hbase-checksum<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>   * verification fails, then it will switch back to using<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>   * hdfs checksums for verifiying data that is being read from storage.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>   *<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>   * If this parameter is set to false, then hbase will not<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>   * verify any checksums, instead it will depend on checksum verification<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>   * being done in the hdfs client.<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>   */<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>  public static final String HBASE_CHECKSUM_VERIFICATION =<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      "hbase.regionserver.checksum.verify";<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span><a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>  public static final String LOCALHOST_IP = "127.0.0.1";<a name="line.1099"></a>
+<span class="sourceLineNo">1035</span>  public static final float HFILE_BLOCK_CACHE_SIZE_DEFAULT = 0.4f;<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span><a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>  /*<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>    * Minimum percentage of free heap necessary for a successful cluster startup.<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>    */<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>  public static final float HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD = 0.2f;<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span><a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>  /**<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>   */<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>  @Deprecated<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>  public static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>      Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span><a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>  /**<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>   * &lt;pre&gt;<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>   * &lt;/pre&gt;<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>   */<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>  @Deprecated<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>  public static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>  /**<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>   */<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>  @Deprecated<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>  /**<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   */<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>  @Deprecated<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>  /**<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>   */<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>  @Deprecated<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>  public static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>  public static final String CP_HTD_ATTR_INCLUSION_KEY =<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      "hbase.coprocessor.classloader.included.classes";<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>  /** The delay when re-trying a socket operation in a loop (HBASE-4712) */<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>  public static final int SOCKET_RETRY_WAIT_MS = 200;<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span><a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>  /** Host name of the local machine */<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>  public static final String LOCALHOST = "localhost";<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span><a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>  /**<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>   * If this parameter is set to true, then hbase will read<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   * data and then verify checksums. Checksum verification<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   * inside hdfs will be switched off.  However, if the hbase-checksum<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   * verification fails, then it will switch back to using<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>   * hdfs checksums for verifiying data that is being read from storage.<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>   *<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>   * If this parameter is set to false, then hbase will not<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>   * verify any checksums, instead it will depend on checksum verification<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>   * being done in the hdfs client.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>   */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>  public static final String HBASE_CHECKSUM_VERIFICATION =<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      "hbase.regionserver.checksum.verify";<a name="line.1099"></a>
 <span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>  public static final String REGION_SERVER_HANDLER_COUNT = "hbase.regionserver.handler.count";<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static final int DEFAULT_REGION_SERVER_HANDLER_COUNT = 30;<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>  /*<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>   * REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT:<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>   * -1  =&gt; Disable aborting<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>   * 0   =&gt; Abort if even a single handler has died<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>   * 0.x =&gt; Abort only when this percent of handlers have died<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>   * 1   =&gt; Abort only all of the handers have died<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>   */<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>  public static final String REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT =<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      "hbase.regionserver.handler.abort.on.error.percent";<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  public static final double DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT = 0.5;<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span><a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>  //High priority handlers to deal with admin requests and system table operation requests<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>  public static final String REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT =<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      "hbase.regionserver.metahandler.count";<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>  public static final int DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT = 20;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span><a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>  public static final String REGION_SERVER_REPLICATION_HANDLER_COUNT =<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      "hbase.regionserver.replication.handler.count";<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>  public static final int DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT = 3;<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>  // Meta Transition handlers to deal with meta ReportRegionStateTransitionRequest. Meta transition<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>  // should be dealt with in a separate handler in case blocking other region's transition.<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>  public static final String MASTER_META_TRANSITION_HANDLER_COUNT =<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      "hbase.master.meta.transition.handler.count";<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>  public static final int MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT = 1;<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span><a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>  /** Conf key for enabling meta replication */<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>  public static final String USE_META_REPLICAS = "hbase.meta.replicas.use";<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>  public static final boolean DEFAULT_USE_META_REPLICAS = false;<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>  public static final String META_REPLICAS_NUM = "hbase.meta.replica.count";<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>  public static final int DEFAULT_META_REPLICA_NUM = 1;<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span><a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  /**<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>   * The name of the configuration parameter that specifies<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>   * the number of bytes in a newly created checksum chunk.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   */<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>  public static final String BYTES_PER_CHECKSUM =<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>      "hbase.hstore.bytes.per.checksum";<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  /**<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>   * The name of the configuration parameter that specifies<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>   * the name of an algorithm that is used to compute checksums<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>   * for newly created blocks.<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>   */<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>  public static final String CHECKSUM_TYPE_NAME =<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      "hbase.hstore.checksum.algorithm";<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span><a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>  /** Enable file permission modification from standard hbase */<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>  public static final String ENABLE_DATA_FILE_UMASK = "hbase.data.umask.enable";<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  /** File permission umask to use when creating hbase data files */<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>  public static final String DATA_FILE_UMASK_KEY = "hbase.data.umask";<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span><a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  /** Configuration name of WAL Compression */<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>  public static final String ENABLE_WAL_COMPRESSION =<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    "hbase.regionserver.wal.enablecompression";<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>  /** Configuration name of WAL storage policy<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>   * Valid values are: HOT, COLD, WARM, ALL_SSD, ONE_SSD, LAZY_PERSIST<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>   * See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html*/<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>  public static final String WAL_STORAGE_POLICY = "hbase.wal.storage.policy";<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>  /**<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>   * "NONE" is not a valid storage policy and means we defer the policy to HDFS. @see<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>   * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20691"&gt;HBASE-20691&lt;/a&gt;<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>   */<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>  public static final String DEFER_TO_HDFS_STORAGE_POLICY = "NONE";<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  /** By default we defer the WAL storage policy to HDFS */<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>  public static final String DEFAULT_WAL_STORAGE_POLICY = DEFER_TO_HDFS_STORAGE_POLICY;<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>  /** Region in Transition metrics threshold time */<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>  public static final String LOAD_BALANCER_SLOP_KEY = "hbase.regions.slop";<a name="line.1175"></a>
+<span class="sourceLineNo">1101</span>  public static final String LOCALHOST_IP = "127.0.0.1";<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span><a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>  public static final String REGION_SERVER_HANDLER_COUNT = "hbase.regionserver.handler.count";<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>  public static final int DEFAULT_REGION_SERVER_HANDLER_COUNT = 30;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span><a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>  /*<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>   * REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT:<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>   * -1  =&gt; Disable aborting<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>   * 0   =&gt; Abort if even a single handler has died<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>   * 0.x =&gt; Abort only when this percent of handlers have died<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>   * 1   =&gt; Abort only all of the handers have died<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>   */<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>  public static final String REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT =<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      "hbase.regionserver.handler.abort.on.error.percent";<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>  public static final double DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT = 0.5;<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>  //High priority handlers to deal with admin requests and system table operation requests<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>  public static final String REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT =<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      "hbase.regionserver.metahandler.count";<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>  public static final int DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT = 20;<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span><a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>  public static final String REGION_SERVER_REPLICATION_HANDLER_COUNT =<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      "hbase.regionserver.replication.handler.count";<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>  public static final int DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT = 3;<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  // Meta Transition handlers to deal with meta ReportRegionStateTransitionRequest. Meta transition<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>  // should be dealt with in a separate handler in case blocking other region's transition.<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>  public static final String MASTER_META_TRANSITION_HANDLER_COUNT =<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>      "hbase.master.meta.transition.handler.count";<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  public static final int MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT = 1;<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  /** Conf key for enabling meta replication */<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>  public static final String USE_META_REPLICAS = "hbase.meta.replicas.use";<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>  public static final boolean DEFAULT_USE_META_REPLICAS = false;<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>  public static final String META_REPLICAS_NUM = "hbase.meta.replica.count";<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  public static final int DEFAULT_META_REPLICA_NUM = 1;<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * The name of the configuration parameter that specifies<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * the number of bytes in a newly created checksum chunk.<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   */<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>  public static final String BYTES_PER_CHECKSUM =<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>      "hbase.hstore.bytes.per.checksum";<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span><a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>  /**<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>   * The name of the configuration parameter that specifies<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>   * the name of an algorithm that is used to compute checksums<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>   * for newly created blocks.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>   */<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>  public static final String CHECKSUM_TYPE_NAME =<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>      "hbase.hstore.checksum.algorithm";<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span><a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>  /** Enable file permission modification from standard hbase */<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>  public static final String ENABLE_DATA_FILE_UMASK = "hbase.data.umask.enable";<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>  /** File permission umask to use when creating hbase data files */<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>  public static final String DATA_FILE_UMASK_KEY = "hbase.data.umask";<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span><a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  /** Configuration name of WAL Compression */<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>  public static final String ENABLE_WAL_COMPRESSION =<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    "hbase.regionserver.wal.enablecompression";<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span><a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>  /** Configuration name of WAL storage policy<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>   * Valid values are: HOT, COLD, WARM, ALL_SSD, ONE_SSD, LAZY_PERSIST<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>   * See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html*/<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>  public static final String WAL_STORAGE_POLICY = "hbase.wal.storage.policy";<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>  /**<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>   * "NONE" is not a valid storage policy and means we defer the policy to HDFS. @see<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>   * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20691"&gt;HBASE-20691&lt;/a&gt;<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>   */<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>  public static final String DEFER_TO_HDFS_STORAGE_POLICY = "NONE";<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>  /** By default we defer the WAL storage policy to HDFS */<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>  public static final String DEFAULT_WAL_STORAGE_POLICY = DEFER_TO_HDFS_STORAGE_POLICY;<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span><a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  /** Region in Transition metrics threshold time */<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.1175"></a>
 <span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>  /** delimiter used between portions of a region name */<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>  public static final int DELIMITER = ',';<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  /**<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>   * QOS attributes: these attributes are used to demarcate RPC call processing<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>   * by different set of handlers. For example, HIGH_QOS tagged methods are<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>   * handled by high priority handlers.<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>   */<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>  // normal_QOS &lt; replication_QOS &lt; replay_QOS &lt; QOS_threshold &lt; admin_QOS &lt; high_QOS &lt; meta_QOS<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>  public static final int PRIORITY_UNSET = -1;<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  public static final int NORMAL_QOS = 0;<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>  public static final int REPLICATION_QOS = 5;<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  public static final int REPLAY_QOS = 6;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>  public static final int QOS_THRESHOLD = 10;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>  public static final int ADMIN_QOS = 100;<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>  public static final int HIGH_QOS = 200;<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>  public static final int SYSTEMTABLE_QOS = HIGH_QOS;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  /**<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   * @deprecated the name "META_QOS" is a bit ambiguous, actually only meta region transition can<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   *             use this priority, and you should not use this directly. Will be removed in 3.0.0.<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>   */<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>  @Deprecated<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>  public static final int META_QOS = 300;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span><a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>  /** Directory under /hbase where archived hfiles are stored */<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>  public static final String HFILE_ARCHIVE_DIRECTORY = "archive";<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>  /**<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   * Name of the directory to store all snapshots. See SnapshotDescriptionUtils for<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   * remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>   * uni-directional.<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  public static final String SNAPSHOT_DIR_NAME = ".hbase-snapshot";<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  /* Name of old snapshot directory. See HBASE-8352 for details on why it needs to be renamed */<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  public static final String OLD_SNAPSHOT_DIR_NAME = ".snapshot";<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span><a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  /** Temporary directory used for table creation and deletion */<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>  public static final String HBASE_TEMP_DIRECTORY = ".tmp";<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  /**<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * The period (in milliseconds) between computing region server point in time metrics<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  public static final String REGIONSERVER_METRICS_PERIOD = "hbase.regionserver.metrics.period";<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>  public static final long DEFAULT_REGIONSERVER_METRICS_PERIOD = 5000;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  /** Directories that are not HBase table directories */<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>  public static final List&lt;String&gt; HBASE_NON_TABLE_DIRS =<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    Collections.unmodifiableList(Arrays.asList(new String[] {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      HBCK_SIDELINEDIR_NAME, HBASE_TEMP_DIRECTORY, MIGRATION_NAME<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    }));<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span><a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>  /**<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>   * Directories that are not HBase user table directories.<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>   * @deprecated Since hbase-2.3.0; no replacement as not used any more (internally at least)<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>   */<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>  @Deprecated<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>  public static final List&lt;String&gt; HBASE_NON_USER_TABLE_DIRS =<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    Collections.unmodifiableList(Arrays.asList((String[])ArrayUtils.addAll(<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      new String[] { TableName.META_TABLE_NAME.getNameAsString() },<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      HBASE_NON_TABLE_DIRS.toArray())));<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span><a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>  /** Health script related settings. */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  public static final String HEALTH_SCRIPT_LOC = "hbase.node.health.script.location";<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  public static final String HEALTH_SCRIPT_TIMEOUT = "hbase.node.health.script.timeout";<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  public static final String HEALTH_CHORE_WAKE_FREQ =<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>      "hbase.node.health.script.frequency";<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>  public static final long DEFAULT_HEALTH_SCRIPT_TIMEOUT = 60000;<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  /**<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * The maximum number of health check failures a server can encounter consecutively.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public static final String HEALTH_FAILURE_THRESHOLD =<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>      "hbase.node.health.failure.threshold";<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>  public static final int DEFAULT_HEALTH_FAILURE_THRESHOLD = 3;<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span><a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  public static final String EXECUTOR_STATUS_COLLECT_ENABLED =<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      "hbase.executors.status.collect.enabled";<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>  public static final boolean DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED = 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>   * Setting to activate, or not, the publication of the status by the master. Default<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   *  notification is by a multicast message.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   */<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  public static final String STATUS_PUBLISHED = "hbase.status.published";<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  public static final boolean STATUS_PUBLISHED_DEFAULT = false;<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span><a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>  /**<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>   * IP to use for the multicast status messages between the master and the clients.<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>   * The default address is chosen as one among others within the ones suitable for multicast<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>   * messages.<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>   */<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>  public static final String STATUS_MULTICAST_ADDRESS = "hbase.status.multicast.address.ip";<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>  public static final String DEFAULT_STATUS_MULTICAST_ADDRESS = "226.1.1.3";<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span><a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>  /**<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   * The address to use for binding the local socket for receiving multicast. Defaults to<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>   * 0.0.0.0.<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-9961"&gt;HBASE-9961&lt;/a&gt;<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  public static final String STATUS_MULTICAST_BIND_ADDRESS =<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      "hbase.status.multicast.bind.address.ip";<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  public static final String DEFAULT_STATUS_MULTICAST_BIND_ADDRESS = "0.0.0.0";<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span><a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  /**<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * The port to use for the multicast messages.<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   */<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>  public static final String STATUS_MULTICAST_PORT = "hbase.status.multicast.address.port";<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  public static final int DEFAULT_STATUS_MULTICAST_PORT = 16100;<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span><a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  /**<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   * The network interface name to use for the multicast messages.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   */<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>  public static final String STATUS_MULTICAST_NI_NAME = "hbase.status.multicast.ni.name";<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span><a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  /**<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   * The address to use for binding the local socket for sending multicast. Defaults to 0.0.0.0.<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   */<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  public static final String STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS =<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    "hbase.status.multicast.publisher.bind.address.ip";<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  public static final String DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS = "0.0.0.0";<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span><a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>  public static final long NO_NONCE = 0;<a name="line.1296"></a>
+<span class="sourceLineNo">1177</span>  public static final String LOAD_BALANCER_SLOP_KEY = "hbase.regions.slop";<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span><a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>  /** delimiter used between portions of a region name */<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>  public static final int DELIMITER = ',';<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span><a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>  /**<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>   * QOS attributes: these attributes are used to demarcate RPC call processing<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>   * by different set of handlers. For example, HIGH_QOS tagged methods are<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>   * handled by high priority handlers.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>   */<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>  // normal_QOS &lt; replication_QOS &lt; replay_QOS &lt; QOS_threshold &lt; admin_QOS &lt; high_QOS &lt; meta_QOS<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  public static final int PRIORITY_UNSET = -1;<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>  public static final int NORMAL_QOS = 0;<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  public static final int REPLICATION_QOS = 5;<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>  public static final int REPLAY_QOS = 6;<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  public static final int QOS_THRESHOLD = 10;<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>  public static final int ADMIN_QOS = 100;<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  public static final int HIGH_QOS = 200;<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  public static final int SYSTEMTABLE_QOS = HIGH_QOS;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>  /**<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @deprecated the name "META_QOS" is a bit ambiguous, actually only meta region transition can<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   *             use this priority, and you should not use this directly. Will be removed in 3.0.0.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   */<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @Deprecated<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public static final int META_QOS = 300;<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span><a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  /** Directory under /hbase where archived hfiles are stored */<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  public static final String HFILE_ARCHIVE_DIRECTORY = "archive";<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  /**<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   * Name of the directory to store all snapshots. See SnapshotDescriptionUtils for<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   * remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>   * uni-directional.<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>   */<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>  public static final String SNAPSHOT_DIR_NAME = ".hbase-snapshot";<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span><a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>  /* Name of old snapshot directory. See HBASE-8352 for details on why it needs to be renamed */<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>  public static final String OLD_SNAPSHOT_DIR_NAME = ".snapshot";<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span><a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>  /** Temporary directory used for table creation and deletion */<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  public static final String HBASE_TEMP_DIRECTORY = ".tmp";<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  /**<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>   * The period (in milliseconds) between computing region server point in time metrics<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>   */<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>  public static final String REGIONSERVER_METRICS_PERIOD = "hbase.regionserver.metrics.period";<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  public static final long DEFAULT_REGIONSERVER_METRICS_PERIOD = 5000;<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>  /** Directories that are not HBase table directories */<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  public static final List&lt;String&gt; HBASE_NON_TABLE_DIRS =<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    Collections.unmodifiableList(Arrays.asList(new String[] {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      HBCK_SIDELINEDIR_NAME, HBASE_TEMP_DIRECTORY, MIGRATION_NAME<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    }));<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  /**<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>   * Directories that are not HBase user table directories.<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>   * @deprecated Since hbase-2.3.0; no replacement as not used any more (internally at least)<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>   */<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>  @Deprecated<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>  public static final List&lt;String&gt; HBASE_NON_USER_TABLE_DIRS =<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>    Collections.unmodifiableList(Arrays.asList((String[])ArrayUtils.addAll(<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      new String[] { TableName.META_TABLE_NAME.getNameAsString() },<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      HBASE_NON_TABLE_DIRS.toArray())));<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span><a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>  /** Health script related settings. */<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>  public static final String HEALTH_SCRIPT_LOC = "hbase.node.health.script.location";<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  public static final String HEALTH_SCRIPT_TIMEOUT = "hbase.node.health.script.timeout";<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>  public static final String HEALTH_CHORE_WAKE_FREQ =<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      "hbase.node.health.script.frequency";<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  public static final long DEFAULT_HEALTH_SCRIPT_TIMEOUT = 60000;<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>   * The maximum number of health check failures a server can encounter consecutively.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>  public static final String HEALTH_FAILURE_THRESHOLD =<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      "hbase.node.health.failure.threshold";<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>  public static final int DEFAULT_HEALTH_FAILURE_THRESHOLD = 3;<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span><a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  public static final String EXECUTOR_STATUS_COLLECT_ENABLED =<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>      "hbase.executors.status.collect.enabled";<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  public static final boolean DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED = true;<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span><a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>  /**<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   * Setting to activate, or not, the publication of the status by the master. Default<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   *  notification is by a multicast message.<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   */<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>  public static final String STATUS_PUBLISHED = "hbase.status.published";<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  public static final boolean STATUS_PUBLISHED_DEFAULT = false;<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span><a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>  /**<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>   * IP to use for the multicast status messages between the master and the clients.<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>   * The default address is chosen as one among others within the ones suitable for multicast<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>   * messages.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>   */<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>  public static final String STATUS_MULTICAST_ADDRESS = "hbase.status.multicast.address.ip";<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>  public static final String DEFAULT_STATUS_MULTICAST_ADDRESS = "226.1.1.3";<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>   * The address to use for binding the local socket for receiving multicast. Defaults to<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * 0.0.0.0.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-9961"&gt;HBASE-9961&lt;/a&gt;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   */<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>  public static final String STATUS_MULTICAST_BIND_ADDRESS =<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>      "hbase.status.multicast.bind.address.ip";<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  public static final String DEFAULT_STATUS_MULTICAST_BIND_ADDRESS = "0.0.0.0";<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>  /**<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>   * The port to use for the multicast messages.<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  public static final String STATUS_MULTICAST_PORT = "hbase.status.multicast.address.port";<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  public static final int DEFAULT_STATUS_MULTICAST_PORT = 16100;<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>   * The network interface name to use for the multicast messages.<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  public static final String STATUS_MULTICAST_NI_NAME = "hbase.status.multicast.ni.name";<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span><a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>  /**<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * The address to use for binding the local socket for sending multicast. Defaults to 0.0.0.0.<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  public static final String STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS =<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    "hbase.status.multicast.publisher.bind.address.ip";<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>  public static final String DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS = "0.0.0.0";<a name="line.1296"></a>
 <span class="sourceLineNo">1297</span><a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  /** Default cipher for encryption */<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>  public static final String CIPHER_AES = "AES";<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>  /** Configuration key for the crypto algorithm provider, a class name */<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>  public static final String CRYPTO_CIPHERPROVIDER_CONF_KEY = "hbase.crypto.cipherprovider";<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>  /** Configuration key for the crypto key provider, a class name */<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  public static final String CRYPTO_KEYPROVIDER_CONF_KEY = "hbase.crypto.keyprovider";<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /** Configuration key for the crypto key provider parameters */<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>  public static final String CRYPTO_KEYPROVIDER_PARAMETERS_KEY =<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      "hbase.crypto.keyprovider.parameters";<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span><a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>  /** Configuration key for the name of the master key for the cluster, a string */<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  public static final String CRYPTO_MASTERKEY_NAME_CONF_KEY = "hbase.crypto.master.key.name";<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /** Configuration key for the name of the alternate master key for the cluster, a string */<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  public static final String CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY =<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    "hbase.crypto.master.alternate.key.name";<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span><a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>  /** Configuration key for the algorithm to use when encrypting the WAL, a string */<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  public static final String CRYPTO_WAL_ALGORITHM_CONF_KEY = "hbase.crypto.wal.algorithm";<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  /** Configuration key for the name of the master WAL encryption key for the cluster, a string */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  public static final String CRYPTO_WAL_KEY_NAME_CONF_KEY = "hbase.crypto.wal.key.name";<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  /** Configuration key for the algorithm used for creating jks key, a string */<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>  public static final String CRYPTO_KEY_ALGORITHM_CONF_KEY = "hbase.crypto.key.algorithm";<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span><a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  /** Configuration key for the name of the alternate cipher algorithm for the cluster, a string */<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>  public static final String CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY =<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      "hbase.crypto.alternate.key.algorithm";<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span><a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>  /** Configuration key for enabling WAL encryption, a boolean */<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  public static final String ENABLE_WAL_ENCRYPTION = "hbase.regionserver.wal.encryption";<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  /** Configuration key for setting RPC codec class name */<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>  public static final String RPC_CODEC_CONF_KEY = "hbase.client.rpc.codec";<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span><a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>  /** Configuration key for setting replication codec class name */<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>  public static final String REPLICATION_CODEC_CONF_KEY = "hbase.replication.rpc.codec";<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>  public static final String REPLICATION_SOURCE_MAXTHREADS_KEY =<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      "hbase.replication.source.maxthreads";<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span><a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>  /**<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   * Drop edits for tables that been deleted from the replication source and target<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>   * @deprecated moved it into HBaseInterClusterReplicationEndpoint<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>   */<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  @Deprecated<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>  public static final String REPLICATION_DROP_ON_DELETED_TABLE_KEY =<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      "hbase.replication.drop.on.deleted.table";<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span><a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>  public static final int REPLICATION_SOURCE_MAXTHREADS_DEFAULT = 10;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>  /** Configuration key for SplitLog manager timeout */<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>  public static final String HBASE_SPLITLOG_MANAGER_TIMEOUT = "hbase.splitlog.manager.timeout";<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span><a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>  /**<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   * Configuration keys for Bucket cache<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>   */<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>  // TODO moving these bucket cache implementation specific configs to this level is violation of<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>  // encapsulation. But as these has to be referred from hbase-common and bucket cache<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>  // sits in hbase-server, there were no other go! Can we move the cache implementation to<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>  // hbase-common?<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>   * Current ioengine options in include: heap, offheap and file:PATH (where PATH is the path<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   * to the file that will host the file-based cache.  See BucketCache#getIOEngineFromName() for<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>   * list of supported ioengine options.<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   * &lt;p&gt;Set this option and a non-zero {@link #BUCKET_CACHE_SIZE_KEY} to enable bucket cache.<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>   */<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  public static final String BUCKET_CACHE_IOENGINE_KEY = "hbase.bucketcache.ioengine";<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span><a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>  /**<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>   * When using bucket cache, this is a float that EITHER represents a percentage of total heap<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>   * memory size to give to the cache (if &amp;lt; 1.0) OR, it is the capacity in<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>   * megabytes of the cache.<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>   */<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>  public static final String BUCKET_CACHE_SIZE_KEY = "hbase.bucketcache.size";<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>   * HConstants for fast fail on the client side follow<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>  /**<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>   * Config for enabling/disabling the fast fail mode.<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>   */<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>  @Deprecated<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>  public static final String HBASE_CLIENT_FAST_FAIL_MODE_ENABLED =<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    "hbase.client.fast.fail.mode.enabled";<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span><a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>  /**<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>   */<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>  @Deprecated<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>  public static final boolean HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT = false;<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span><a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>  /**<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>   */<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>  @Deprecated<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>  public static final String HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS =<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    "hbase.client.fastfail.threshold";<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>  /**<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>   */<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  @Deprecated<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  public static final long HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT = 60000;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>  /**<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  @Deprecated<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>  public static final String HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS =<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    "hbase.client.failure.map.cleanup.interval";<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  /**<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>   */<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>  @Deprecated<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>  public static final long HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT = 600000;<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>   */<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>  @Deprecated<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>  public static final String HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS =<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    "hbase.client.fast.fail.cleanup.duration";<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>   */<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>  @Deprecated<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>  public static final long HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT = 600000;<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>  /**<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   */<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>  @Deprecated<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  public static final String HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL =<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    "hbase.client.fast.fail.interceptor.impl";<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span><a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>  /**<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0, replaced by procedure-based<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>   *   distributed WAL splitter; see SplitWALManager.<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>   */<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>  @Deprecated<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>  public static final String HBASE_SPLIT_WAL_COORDINATED_BY_ZK = "hbase.split.wal.zk.coordinated";<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>  /**<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0.<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>   */<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>  @Deprecated<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  public static final boolean DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK = false;<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  public static final String HBASE_SPLIT_WAL_MAX_SPLITTER = "hbase.regionserver.wal.max.splitters";<a name="line.1466"></a>
+<span class="sourceLineNo">1298</span>  public static final long NO_NONCE = 0;<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span><a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>  /** Default cipher for encryption */<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  public static final String CIPHER_AES = "AES";<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  /** Configuration key for the crypto algorithm provider, a class name */<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  public static final String CRYPTO_CIPHERPROVIDER_CONF_KEY = "hbase.crypto.cipherprovider";<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  /** Configuration key for the crypto key provider, a class name */<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>  public static final String CRYPTO_KEYPROVIDER_CONF_KEY = "hbase.crypto.keyprovider";<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span><a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>  /** Configuration key for the crypto key provider parameters */<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  public static final String CRYPTO_KEYPROVIDER_PARAMETERS_KEY =<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>      "hbase.crypto.keyprovider.parameters";<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span><a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>  /** Configuration key for the name of the master key for the cluster, a string */<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>  public static final String CRYPTO_MASTERKEY_NAME_CONF_KEY = "hbase.crypto.master.key.name";<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span><a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>  /** Configuration key for the name of the alternate master key for the cluster, a string */<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>  public static final String CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY =<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    "hbase.crypto.master.alternate.key.name";<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  /** Configuration key for the algorithm to use when encrypting the WAL, a string */<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>  public static final String CRYPTO_WAL_ALGORITHM_CONF_KEY = "hbase.crypto.wal.algorithm";<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span><a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>  /** Configuration key for the name of the master WAL encryption key for the cluster, a string */<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>  public static final String CRYPTO_WAL_KEY_NAME_CONF_KEY = "hbase.crypto.wal.key.name";<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span><a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>  /** Configuration key for the algorithm used for creating jks key, a string */<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>  public static final String CRYPTO_KEY_ALGORITHM_CONF_KEY = "hbase.crypto.key.algorithm";<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span><a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>  /** Configuration key for the name of the alternate cipher algorithm for the cluster, a string */<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>  public static final String CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY =<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>      "hbase.crypto.alternate.key.algorithm";<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span><a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  /** Configuration key for enabling WAL encryption, a boolean */<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>  public static final String ENABLE_WAL_ENCRYPTION = "hbase.regionserver.wal.encryption";<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span><a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  /** Configuration key for setting RPC codec class name */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>  public static final String RPC_CODEC_CONF_KEY = "hbase.client.rpc.codec";<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span><a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>  /** Configuration key for setting replication codec class name */<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>  public static final String REPLICATION_CODEC_CONF_KEY = "hbase.replication.rpc.codec";<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span><a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>  public static final String REPLICATION_SOURCE_MAXTHREADS_KEY =<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      "hbase.replication.source.maxthreads";<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>   * Drop edits for tables that been deleted from the replication source and target<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   * @deprecated moved it into HBaseInterClusterReplicationEndpoint<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>   */<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  @Deprecated<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>  public static final String REPLICATION_DROP_ON_DELETED_TABLE_KEY =<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>      "hbase.replication.drop.on.deleted.table";<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span><a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>  public static final int REPLICATION_SOURCE_MAXTHREADS_DEFAULT = 10;<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span><a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>  /** Configuration key for SplitLog manager timeout */<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>  public static final String HBASE_SPLITLOG_MANAGER_TIMEOUT = "hbase.splitlog.manager.timeout";<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span><a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>  /**<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   * Configuration keys for Bucket cache<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   */<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>  // TODO moving these bucket cache implementation specific configs to this level is violation of<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>  // encapsulation. But as these has to be referred from hbase-common and bucket cache<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>  // sits in hbase-server, there were no other go! Can we move the cache implementation to<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  // hbase-common?<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>   * Current ioengine options in include: heap, offheap and file:PATH (where PATH is the path<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>   * to the file that will host the file-based cache.  See BucketCache#getIOEngineFromName() for<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>   * list of supported ioengine options.<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>   * &lt;p&gt;Set this option and a non-zero {@link #BUCKET_CACHE_SIZE_KEY} to enable bucket cache.<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>   */<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>  public static final String BUCKET_CACHE_IOENGINE_KEY = "hbase.bucketcache.ioengine";<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>  /**<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>   * When using bucket cache, this is a float that EITHER represents a percentage of total heap<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>   * memory size to give to the cache (if &amp;lt; 1.0) OR, it is the capacity in<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>   * megabytes of the cache.<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>   */<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  public static final String BUCKET_CACHE_SIZE_KEY = "hbase.bucketcache.size";<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span><a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>  /**<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>   * HConstants for fast fail on the client side follow<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>   */<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>  /**<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   * Config for enabling/disabling the fast fail mode.<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>   */<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>  @Deprecated<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>  public static final String HBASE_CLIENT_FAST_FAIL_MODE_ENABLED =<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    "hbase.client.fast.fail.mode.enabled";<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>  /**<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>   */<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>  @Deprecated<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>  public static final boolean HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT = false;<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>  /**<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>   */<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  @Deprecated<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>  public static final String HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS =<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>    "hbase.client.fastfail.threshold";<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>   */<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>  @Deprecated<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>  public static final long HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT = 60000;<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span><a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>  /**<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>   */<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>  @Deprecated<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>  public static final String HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS =<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    "hbase.client.failure.map.cleanup.interval";<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>  /**<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>   */<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>  @Deprecated<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>  public static final long HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT = 600000;<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span><a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>  /**<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>   */<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>  @Deprecated<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>  public static final String HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS =<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>    "hbase.client.fast.fail.cleanup.duration";<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>  /**<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>   */<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  @Deprecated<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>  public static final long HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT = 600000;<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span><a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>  /**<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>   */<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  @Deprecated<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>  public static final String HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL =<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    "hbase.client.fast.fail.interceptor.impl";<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>  /**<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0, replaced by procedure-based<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>   *   distributed WAL splitter; see SplitWALManager.<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>   */<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>  @Deprecated<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>  public static final String HBASE_SPLIT_WAL_COORDINATED_BY_ZK = "hbase.split.wal.zk.coordinated";<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>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0.<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   */<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  @Deprecated<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>  public static final boolean DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK = false;<a name="line.1466"></a>
 <span class="sourceLineNo">1467</span><a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>  public static final int DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER = 2;<a name="line.1468"></a>
+<span class="sourceLineNo">1468</span>  public static final String HBASE_SPLIT_WAL_MAX_SPLITTER = "hbase.regionserver.wal.max.splitters";<a name="line.1468"></a>
 <span class="sourceLineNo">1469</span><a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  /** Config key for if the server should send backpressure and if the client should listen to<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>   * that backpressure from the server */<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  public static final String ENABLE_CLIENT_BACKPRESSURE = "hbase.client.backpressure.enabled";<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>  public static final boolean DEFAULT_ENABLE_CLIENT_BACKPRESSURE = false;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span><a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>  public static final String HEAP_OCCUPANCY_LOW_WATERMARK_KEY =<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      "hbase.heap.occupancy.low_water_mark";<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>  public static final float DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK = 0.95f;<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  public static final String HEAP_OCCUPANCY_HIGH_WATERMARK_KEY =<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      "hbase.heap.occupancy.high_water_mark";<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  public static final float DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK = 0.98f;<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  /**<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   * The max number of threads used for splitting storefiles in parallel during<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   * the region split process.<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   */<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>  public static final String REGION_SPLIT_THREADS_MAX =<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>    "hbase.regionserver.region.split.threads.max";<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span><a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>  /** Canary config keys */<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>  // TODO: Move these defines to Canary Class<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  public static final String HBASE_CANARY_WRITE_DATA_TTL_KEY = "hbase.canary.write.data.ttl";<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY =<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      "hbase.canary.write.perserver.regions.lowerLimit";<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span><a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY =<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>      "hbase.canary.write.perserver.regions.upperLimit";<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span><a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>  public static final String HBASE_CANARY_WRITE_VALUE_SIZE_KEY = "hbase.canary.write.value.size";<a name="line.1499"></a>
+<span class="sourceLineNo">1470</span>  public static final int DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER = 2;<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span><a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  /** Config key for if the server should send backpressure and if the client should listen to<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   * that backpressure from the server */<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>  public static final String ENABLE_CLIENT_BACKPRESSURE = "hbase.client.backpressure.enabled";<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  public static final boolean DEFAULT_ENABLE_CLIENT_BACKPRESSURE = false;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  public static final String HEAP_OCCUPANCY_LOW_WATERMARK_KEY =<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      "hbase.heap.occupancy.low_water_mark";<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>  public static final float DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK = 0.95f;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>  public static final String HEAP_OCCUPANCY_HIGH_WATERMARK_KEY =<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>      "hbase.heap.occupancy.high_water_mark";<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>  public static final float DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK = 0.98f;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span><a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>  /**<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   * The max number of threads used for splitting storefiles in parallel during<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   * the region split process.<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   */<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>  public static final String REGION_SPLIT_THREADS_MAX =<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    "hbase.regionserver.region.split.threads.max";<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span><a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>  /** Canary config keys */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  // TODO: Move these defines to Canary Class<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  public static final String HBASE_CANARY_WRITE_DATA_TTL_KEY = "hbase.canary.write.data.ttl";<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY =<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>      "hbase.canary.write.perserver.regions.lowerLimit";<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span><a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY =<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      "hbase.canary.write.perserver.regions.upperLimit";<a name="line.1499"></a>
 <span class="sourceLineNo">1500</span><a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  public static final String HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY =<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      "hbase.canary.write.table.check.period";<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span><a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>  public static final String HBASE_CANARY_READ_RAW_SCAN_KEY = "hbase.canary.read.raw.enabled";<a name="line.1504"></a>
+<span class="sourceLineNo">1501</span>  public static final String HBASE_CANARY_WRITE_VALUE_SIZE_KEY = "hbase.canary.write.value.size";<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  public static final String HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY =<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      "hbase.canary.write.table.check.period";<a name="line.1504"></a>
 <span class="sourceLineNo">1505</span><a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>  public static final String HBASE_CANARY_READ_ALL_CF = "hbase.canary.read.all.column.famliy";<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  /**<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>   * Configuration keys for programmatic JAAS configuration for secured ZK interaction<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>   */<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  public static final String ZK_CLIENT_KEYTAB_FILE = "hbase.zookeeper.client.keytab.file";<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>  public static final String ZK_CLIENT_KERBEROS_PRINCIPAL =<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>      "hbase.zookeeper.client.kerberos.principal";<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>  public static final String ZK_SERVER_KEYTAB_FILE = "hbase.zookeeper.server.keytab.file";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>  public static final String ZK_SERVER_KERBEROS_PRINCIPAL =<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      "hbase.zookeeper.server.kerberos.principal";<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span><a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>  /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>   */<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span><a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span><a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>  // Default TTL - FOREVER<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>  public static final long DEFAULT_SNAPSHOT_TTL = 0;<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span><a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>  // User defined Default TTL config key<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public static final String DEFAULT_SNAPSHOT_TTL_CONFIG_KEY = "hbase.master.snapshot.ttl";<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>  // Regions Recovery based on high storeFileRefCount threshold value<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>  public static final String STORE_FILE_REF_COUNT_THRESHOLD =<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>    "hbase.regions.recovery.store.file.ref.count";<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // default -1 indicates there is no threshold on high storeRefCount<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  public static final int DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD = -1;<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span><a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  public static final String REGIONS_RECOVERY_INTERVAL =<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    "hbase.master.regions.recovery.check.interval";<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>  public static final int DEFAULT_REGIONS_RECOVERY_INTERVAL = 1200 * 1000; // Default 20 min<a name="line.1557"></a>
+<span class="sourceLineNo">1506</span>  public static final String HBASE_CANARY_READ_RAW_SCAN_KEY = "hbase.canary.read.raw.enabled";<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span><a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>  public static final String HBASE_CANARY_READ_ALL_CF = "hbase.canary.read.all.column.famliy";<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>   * Configuration keys for programmatic JAAS configuration for secured ZK interaction<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>   */<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>  public static final String ZK_CLIENT_KEYTAB_FILE = "hbase.zookeeper.client.keytab.file";<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>  public static final String ZK_CLIENT_KERBEROS_PRINCIPAL =<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      "hbase.zookeeper.client.kerberos.principal";<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  public static final String ZK_SERVER_KEYTAB_FILE = "hbase.zookeeper.server.keytab.file";<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>  public static final String ZK_SERVER_KERBEROS_PRINCIPAL =<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      "hbase.zookeeper.server.kerberos.principal";<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span><a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<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>   * Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>   */<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span><a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span><a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>  // Default TTL - FOREVER<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>  public static final long DEFAULT_SNAPSHOT_TTL = 0;<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span><a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>  // User defined Default TTL config key<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>  public static final String DEFAULT_SNAPSHOT_TTL_CONFIG_KEY = "hbase.master.snapshot.ttl";<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span><a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>  // Regions Recovery based on high storeFileRefCount threshold value<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public static final String STORE_FILE_REF_COUNT_THRESHOLD =<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    "hbase.regions.recovery.store.file.ref.count";<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span><a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  // default -1 indicates there is no threshold on high storeRefCount<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  public static final int DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD = -1;<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  public static final String REGIONS_RECOVERY_INTERVAL =<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>    "hbase.master.regions.recovery.check.interval";<a name="line.1557"></a>
 <span class="sourceLineNo">1558</span><a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>  /**<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>   * Configurations for master executor services.<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>   */<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>  public static final String MASTER_OPEN_REGION_THREADS =<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      "hbase.master.executor.openregion.threads";<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>  public static final int MASTER_OPEN_REGION_THREADS_DEFAULT = 5;<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span><a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>  public static final String MASTER_CLOSE_REGION_THREADS =<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      "hbase.master.executor.closeregion.threads";<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>  public static final int MASTER_CLOSE_REGION_THREADS_DEFAULT = 5;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  public static final String MASTER_SERVER_OPERATIONS_THREADS =<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      "hbase.master.executor.serverops.threads";<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  public static final int MASTER_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  public static final String MASTER_META_SERVER_OPERATIONS_THREADS =<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      "hbase.master.executor.meta.serverops.threads";<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  public static final int MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span><a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  public static final String MASTER_LOG_REPLAY_OPS_THREADS =<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      "hbase.master.executor.logreplayops.threads";<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  public static final int MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT = 10;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span><a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>  public static final int DEFAULT_SLOW_LOG_RING_BUFFER_SIZE = 256;<a name="line.1582"></a>
+<span class="sourceLineNo">1559</span>  public static final int DEFAULT_REGIONS_RECOVERY_INTERVAL = 1200 * 1000; // Default 20 min<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span><a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>  /**<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>   * Configurations for master executor services.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>   */<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>  public static final String MASTER_OPEN_REGION_THREADS =<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>      "hbase.master.executor.openregion.threads";<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  public static final int MASTER_OPEN_REGION_THREADS_DEFAULT = 5;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span><a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>  public static final String MASTER_CLOSE_REGION_THREADS =<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      "hbase.master.executor.closeregion.threads";<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>  public static final int MASTER_CLOSE_REGION_THREADS_DEFAULT = 5;<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>  public static final String MASTER_SERVER_OPERATIONS_THREADS =<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      "hbase.master.executor.serverops.threads";<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>  public static final int MASTER_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span><a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>  public static final String MASTER_META_SERVER_OPERATIONS_THREADS =<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      "hbase.master.executor.meta.serverops.threads";<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>  public static final int MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>  public static final String MASTER_LOG_REPLAY_OPS_THREADS =<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      "hbase.master.executor.logreplayops.threads";<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  public static final int MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT = 10;<a name="line.1582"></a>
 <span class="sourceLineNo">1583</span><a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  public static final String SLOW_LOG_BUFFER_ENABLED_KEY =<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    "hbase.regionserver.slowlog.buffer.enabled";<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  public static final boolean DEFAULT_ONLINE_LOG_PROVIDER_ENABLED = false;<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span><a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>  /** The slowlog info family as a string*/<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private static final String SLOWLOG_INFO_FAMILY_STR = "info";<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>  /** The slowlog info family */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public static final byte [] SLOWLOG_INFO_FAMILY = Bytes.toBytes(SLOWLOG_INFO_FAMILY_STR);<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>  public static final String SLOW_LOG_SYS_TABLE_ENABLED_KEY =<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    "hbase.regionserver.slowlog.systable.enabled";<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>  public static final boolean DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY = false;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>  /**<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>   */<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  public static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span><a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>  /**<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   * Default value of {@link #BATCH_ROWS_THRESHOLD_NAME}<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>   */<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  public static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>  private HConstants() {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // Can't be instantiated with this ctor.<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">1584</span>  public static final int DEFAULT_SLOW_LOG_RING_BUFFER_SIZE = 256;<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>  public static final String SLOW_LOG_BUFFER_ENABLED_KEY =<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    "hbase.regionserver.slowlog.buffer.enabled";<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>  public static final boolean DEFAULT_ONLINE_LOG_PROVIDER_ENABLED = false;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span><a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>  /** The slowlog info family as a string*/<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>  private static final String SLOWLOG_INFO_FAMILY_STR = "info";<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span><a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  /** The slowlog info family */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  public static final byte [] SLOWLOG_INFO_FAMILY = Bytes.toBytes(SLOWLOG_INFO_FAMILY_STR);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>  public static final String SLOW_LOG_SYS_TABLE_ENABLED_KEY =<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    "hbase.regionserver.slowlog.systable.enabled";<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public static final boolean DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY = false;<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span><a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>  /**<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>   */<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>  public static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<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>   * Default value of {@link #BATCH_ROWS_THRESHOLD_NAME}<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>   */<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>  public static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  private HConstants() {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    // Can't be instantiated with this ctor.<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>}<a name="line.1613"></a>
 
 
 
diff --git a/book.html b/book.html
index adf7be5..7a9a786 100644
--- a/book.html
+++ b/book.html
@@ -46088,7 +46088,7 @@
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2020-09-23 20:05:52 UTC
+Last updated 2020-09-24 20:12:22 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index a959c06..3fbf48e 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -172,7 +172,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index fcff916..6dd7315 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -166,10 +166,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>4309</td>
+<td>4310</td>
 <td>0</td>
 <td>0</td>
-<td>9267</td></tr></table></div>
+<td>9264</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -4457,7 +4457,7 @@
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>41</td></tr>
+<td>40</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</a></td>
 <td>0</td>
@@ -5722,12 +5722,12 @@
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.Replication.java">org/apache/hadoop/hbase/replication/regionserver/Replication.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>2</td></tr>
+<td>1</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>3</td></tr>
+<td>2</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.java</a></td>
 <td>0</td>
@@ -7374,7 +7374,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_blocks.html#NeedBraces">NeedBraces</a></td>
-<td>1158</td>
+<td>1157</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>coding</td>
@@ -7463,7 +7463,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
-<td>2314</td>
+<td>2312</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>misc</td>
@@ -49450,257 +49450,251 @@
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'compactSplitThread' must be private and have accessor methods.</td>
-<td>306</td></tr>
+<td>307</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>831</td></tr>
+<td>832</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 229 lines (max allowed is 150).</td>
-<td>958</td></tr>
+<td>959</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>1086</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>1087</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1088</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>1089</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
-<td>1095</td></tr>
+<td>1096</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>1194</td></tr>
+<td>1195</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>1416</td></tr>
+<td>1429</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>1524</td></tr>
+<td>1537</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 16, expected level should be 18.</td>
-<td>1823</td></tr>
+<td>1836</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>1858</td></tr>
+<td>1871</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'HConstants' has incorrect indentation level 6, expected level should be 8.</td>
-<td>1968</td></tr>
+<td>1980</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>2441</td></tr>
+<td>2453</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'else rcurly' has incorrect indentation level 5, expected level should be 4.</td>
-<td>2475</td></tr>
+<td>2487</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>2550</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>2631</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>2647</td></tr>
+<td>2562</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>2754</td></tr>
+<td>2660</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>2768</td></tr>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
+<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
+<td>2767</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>2771</td></tr>
+<td>2781</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>2848</td></tr>
+<td>2784</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>2853</td></tr>
+<td>2861</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>2866</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3161</td></tr>
-<tr class="b">
+<td>3176</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' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3162</td></tr>
-<tr class="a">
+<td>3177</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' has incorrect indentation level 7, expected level should be 6.</td>
-<td>3163</td></tr>
-<tr class="b">
+<td>3178</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' child has incorrect indentation level 9, expected level should be 8.</td>
-<td>3164</td></tr>
-<tr class="a">
+<td>3179</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' has incorrect indentation level 9, expected level should be 8.</td>
-<td>3165</td></tr>
-<tr class="b">
+<td>3180</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 11, expected level should be 10.</td>
-<td>3166</td></tr>
-<tr class="a">
+<td>3181</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 rcurly' has incorrect indentation level 9, expected level should be 8.</td>
-<td>3167</td></tr>
-<tr class="b">
+<td>3182</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 rcurly' has incorrect indentation level 7, expected level should be 6.</td>
-<td>3168</td></tr>
-<tr class="a">
+<td>3183</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 rcurly' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3169</td></tr>
-<tr class="b">
+<td>3184</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
-<td>3170</td></tr>
-<tr class="a">
+<td>3185</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 3, expected level should be 2.</td>
-<td>3171</td></tr>
-<tr class="b">
+<td>3186</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>3345</td></tr>
-<tr class="a">
+<td>3360</td></tr>
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
-<td>3350</td></tr>
-<tr class="b">
+<td>3365</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' has incorrect indentation level 5, expected level should be 4.</td>
-<td>3486</td></tr>
-<tr class="a">
+<td>3501</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 114).</td>
-<td>3503</td></tr>
-<tr class="b">
+<td>3518</td></tr>
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
-<td>3524</td></tr>
-<tr class="a">
+<td>3539</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 105).</td>
-<td>3552</td></tr></table></div>
+<td>3567</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">
-<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>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -49709,19 +49703,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>101</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>
@@ -49730,94 +49724,94 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HStoreFile.java">org/apache/hadoop/hbase/regionserver/HStoreFile.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>211</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>544</td></tr>
+<td>211</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>544</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>555</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.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 113).</td>
 <td>238</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>406</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>407</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>408</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>409</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>410</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>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>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>414</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>416</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>
@@ -49826,19 +49820,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.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.conf.Configurable' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -49847,19 +49841,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ImmutableSegment.java">org/apache/hadoop/hbase/regionserver/ImmutableSegment.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>34</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>
@@ -49868,25 +49862,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.TableDescriptor' import.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>88</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>
@@ -49895,25 +49889,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Get' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -49922,19 +49916,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>60</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>
@@ -49943,106 +49937,106 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.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 'java.io.IOException' import.</td>
 <td>24</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.regionserver.ScannerContext.NextState' import.</td>
 <td>35</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>76</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>77</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>86</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>87</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>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>186</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>206</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>207</td></tr>
+<td>206</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>207</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>251</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.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.fs.Path' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>174</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>180</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>
@@ -50051,13 +50045,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -50066,25 +50060,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.LeaseManager.java">org/apache/hadoop/hbase/regionserver/LeaseManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>104</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -50093,67 +50087,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.exceptions.UnexpectedStateException' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>47</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>69</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>77</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>99</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>108</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>123</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 39 should have line break after.</td>
 <td>134</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>
@@ -50162,13 +50156,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreCompactor.java">org/apache/hadoop/hbase/regionserver/MemStoreCompactor.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>
@@ -50177,140 +50171,140 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.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.htrace.core.TraceScope' import.</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>117</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>118</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class FlushHandler should be declared as final.</td>
 <td>323</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>342</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>513</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>551</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>553</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>554</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>598</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>599</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>600</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>603</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>604</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>810</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>819</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>829</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>869</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>878</td></tr>
-<tr class="b">
-<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>890</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>891</td></tr>
+<td>890</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>891</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 3, expected level should be 4.</td>
@@ -50318,13 +50312,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.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>
@@ -50333,19 +50327,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreLABImpl.java">org/apache/hadoop/hbase/regionserver/MemStoreLABImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>62</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>
@@ -50354,13 +50348,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreMergerSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreMergerSegmentsIterator.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>
@@ -50369,13 +50363,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreSegmentsIterator.java">org/apache/hadoop/hbase/regionserver/MemStoreSegmentsIterator.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>
@@ -50384,13 +50378,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MemStoreSnapshot.java">org/apache/hadoop/hbase/regionserver/MemStoreSnapshot.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>
@@ -50399,13 +50393,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.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>
@@ -50414,19 +50408,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServer.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>26</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>
@@ -50435,13 +50429,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServerSource.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSource.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -50450,19 +50444,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 244 lines (max allowed is 150).</td>
 <td>674</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>
@@ -50471,13 +50465,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsTable.java">org/apache/hadoop/hbase/regionserver/MetricsTable.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>
@@ -50486,13 +50480,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsTableWrapperAggregateImpl.java">org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.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>
@@ -50501,13 +50495,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MetricsUserAggregateFactory.java">org/apache/hadoop/hbase/regionserver/MetricsUserAggregateFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -50516,68 +50510,68 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Mutation' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>72</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>83</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>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>91</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>100</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>101</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>108</td></tr>
+<td>101</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>108</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
@@ -50585,13 +50579,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MobReferenceOnlyFilter.java">org/apache/hadoop/hbase/regionserver/MobReferenceOnlyFilter.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>
@@ -50600,31 +50594,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.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.LinkedList' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -50633,13 +50627,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MutableOnlineRegions.java">org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.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>
@@ -50648,25 +50642,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.MutableSegment.java">org/apache/hadoop/hbase/regionserver/MutableSegment.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.KeyValue' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.ClassSize' import.</td>
 <td>32</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>
@@ -50675,13 +50669,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NoTagByteBufferChunkKeyValue.java">org/apache/hadoop/hbase/regionserver/NoTagByteBufferChunkKeyValue.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>
@@ -50690,13 +50684,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.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>
@@ -50705,13 +50699,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.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>
@@ -50720,13 +50714,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.OOMERegionServer.java">org/apache/hadoop/hbase/regionserver/OOMERegionServer.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>
@@ -50735,43 +50729,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.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>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>43</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>49</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>51</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 3, expected level should be 2.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -50780,13 +50774,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -50795,265 +50789,265 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.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.namequeues.NamedQueueRecorder' import.</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>144</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>'class def modifier' has incorrect indentation level 3, expected level should be 2.</td>
 <td>430</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>564</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>657</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>703</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 162 lines (max allowed is 150).</td>
 <td>708</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>722</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>738</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>919</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>920</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>921</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>1038</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>1039</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>1040</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>1043</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>'RegionScanner' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1264</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1476</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>'ClientService' has incorrect indentation level 6, expected level should be 8.</td>
 <td>1486</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>'ClientService' has incorrect indentation level 6, expected level should be 8.</td>
 <td>1487</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>'AdminService' has incorrect indentation level 6, expected level should be 8.</td>
 <td>1491</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>'AdminService' has incorrect indentation level 6, expected level should be 8.</td>
 <td>1492</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>1524</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>1549</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>1582</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>1649</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>1830</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>1933</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 121).</td>
 <td>1951</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>'regionServer' has incorrect indentation level 14, expected level should be 16.</td>
 <td>2041</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>'regionOpenInfo' has incorrect indentation level 16, expected level should be 18.</td>
 <td>2045</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>'regionServer' has incorrect indentation level 16, expected level should be 18.</td>
 <td>2049</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>'regionServer' has incorrect indentation level 16, expected level should be 18.</td>
 <td>2052</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>2080</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>2126</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>2272</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>2296</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>2480</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>2674</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>
 <td>Method length is 227 lines (max allowed is 150).</td>
 <td>2676</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 182 lines (max allowed is 150).</td>
 <td>3252</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>3443</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -51062,749 +51056,749 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.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.tmpl.regionserver.RSStatusTmpl' import.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>50</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>52</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>54</td></tr>
+<td>52</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>54</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>56</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>111</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>129</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>211</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>224</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>230</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>237</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>273</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>286</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>288</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>300</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>473</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>474</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>489</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>526</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>528</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>537</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>546</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>550</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>552</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>564</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>576</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>593</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>603</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>604</td></tr>
+<td>603</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>604</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>639</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RegionAsTable.java">org/apache/hadoop/hbase/regionserver/RegionAsTable.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>91</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>114</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>157</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>205</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>215</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>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>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>252</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>271</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>278</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>286</td></tr>
+<td>278</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>286</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>293</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>204</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>328</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>329</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>330</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>'lambda arguments' has incorrect indentation level 14, expected level should be 12.</td>
 <td>419</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>566</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>632</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>663</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>668</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>697</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>705</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>719</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>732</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>800</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>924</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>927</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 9, expected level should be one of the following: 8, 10.</td>
 <td>980</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>995</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>997</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>998</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>999</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>1296</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>1321</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1352</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1354</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1355</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1356</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1365</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1367</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1368</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1369</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1376</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1394</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1396</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1397</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1398</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1409</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1411</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1412</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1413</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1420</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1427</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1429</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1430</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1431</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1436</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1443</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1445</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1446</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1447</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1466</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1468</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1469</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1470</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>1473</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1476</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1478</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1479</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1480</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>1486</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1505</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1507</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1508</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1509</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1515</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>1517</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>1518</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>1519</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>1527</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1530</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>1531</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1540</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>1554</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>1558</td></tr>
+<td>1554</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>1558</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
@@ -51812,13 +51806,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RegionScanner.java">org/apache/hadoop/hbase/regionserver/RegionScanner.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>
@@ -51827,13 +51821,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RegionServerAccounting.java">org/apache/hadoop/hbase/regionserver/RegionServerAccounting.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>
@@ -51842,50 +51836,50 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.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>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>181</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>184</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>185</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' child has incorrect indentation level 7, expected level should be 6.</td>
-<td>290</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def' child has incorrect indentation level 7, expected level should be 6.</td>
-<td>291</td></tr>
+<td>290</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' child has incorrect indentation level 7, expected level should be 6.</td>
+<td>291</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>
@@ -51893,26 +51887,26 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RegionServerServices.java">org/apache/hadoop/hbase/regionserver/RegionServerServices.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>61</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>65</td></tr>
+<td>61</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>65</td></tr>
+<tr class="b">
+<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>
@@ -51920,58 +51914,58 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>84</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>106</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>107</td></tr>
+<td>106</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>107</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>109</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ReplicationSinkService.java">org/apache/hadoop/hbase/regionserver/ReplicationSinkService.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.CellScanner' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -51980,103 +51974,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.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.Cell' import.</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>42</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>43</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>44</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>164</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>181</td></tr>
+<td>164</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>181</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>182</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.java">org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>41</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>42</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>43</td></tr>
+<td>42</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>43</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>44</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.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>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -52085,46 +52079,46 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RowProcessor.java">org/apache/hadoop/hbase/regionserver/RowProcessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>48</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>143</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>150</td></tr>
+<td>143</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>150</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>151</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.RpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.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>
@@ -52133,31 +52127,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ScanInfo.java">org/apache/hadoop/hbase/regionserver/ScanInfo.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>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.HConstants' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>59</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>
@@ -52166,25 +52160,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ScanOptions.java">org/apache/hadoop/hbase/regionserver/ScanOptions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 131).</td>
 <td>41</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 133).</td>
 <td>43</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>
@@ -52193,76 +52187,76 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ScannerContext.java">org/apache/hadoop/hbase/regionserver/ScannerContext.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.metrics.ServerSideScanMetrics' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>235</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>243</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>252</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>261</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>583</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>621</td></tr>
+<td>583</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>621</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>651</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ScannerIdGenerator.java">org/apache/hadoop/hbase/regionserver/ScannerIdGenerator.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>
@@ -52271,26 +52265,26 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.SecureBulkLoadManager.java">org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>457</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>459</td></tr>
+<td>457</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>459</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
@@ -52298,13 +52292,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.Segment.java">org/apache/hadoop/hbase/regionserver/Segment.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -52313,67 +52307,67 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.SegmentFactory.java">org/apache/hadoop/hbase/regionserver/SegmentFactory.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.IOException' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>126</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>132</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>133</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>135</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>137</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>139</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -52382,19 +52376,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.SegmentScanner.java">org/apache/hadoop/hbase/regionserver/SegmentScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Scan' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -52403,70 +52397,70 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ServerNonceManager.java">org/apache/hadoop/hbase/regionserver/ServerNonceManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.EnvironmentEdgeManager' import.</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>152</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>157</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>182</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>243</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>246</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>278</td></tr>
+<td>246</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>278</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>280</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ShipperListener.java">org/apache/hadoop/hbase/regionserver/ShipperListener.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>
@@ -52475,49 +52469,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.ShutdownHook.java">org/apache/hadoop/hbase/regionserver/ShutdownHook.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>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>41</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>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'this' has incorrect indentation level 14, expected level should be 16.</td>
 <td>127</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>256</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>
@@ -52526,25 +52520,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.SimpleRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.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.ipc.PriorityFunction' import.</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 10, expected level should be 4.</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>FileTabCharacter</td>
@@ -52553,13 +52547,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.SplitWALCallable.java">org/apache/hadoop/hbase/regionserver/SplitWALCallable.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>
@@ -52568,73 +52562,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.SteppingSplitPolicy.java">org/apache/hadoop/hbase/regionserver/SteppingSplitPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>26</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>27</td></tr>
+<td>26</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>27</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>28</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.Store.java">org/apache/hadoop/hbase/regionserver/Store.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>97</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>203</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>204</td></tr>
+<td>203</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>204</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>256</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreFileComparators.java">org/apache/hadoop/hbase/regionserver/StoreFileComparators.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -52643,13 +52637,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreFileInfo.java">org/apache/hadoop/hbase/regionserver/StoreFileInfo.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -52658,19 +52652,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreFileManager.java">org/apache/hadoop/hbase/regionserver/StoreFileManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>68</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>
@@ -52679,127 +52673,127 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreFileReader.java">org/apache/hadoop/hbase/regionserver/StoreFileReader.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.KeyValue' import.</td>
 <td>38</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>515</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>535</td></tr>
+<td>515</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>535</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>654</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Scan' import.</td>
 <td>40</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>240</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>297</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>308</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>309</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>311</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>314</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>333</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>453</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>502</td></tr>
+<td>453</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>502</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>510</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreFileWriter.java">org/apache/hadoop/hbase/regionserver/StoreFileWriter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -52808,40 +52802,40 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreFlushContext.java">org/apache/hadoop/hbase/regionserver/StoreFlushContext.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>61</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>71</td></tr>
+<td>61</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>71</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>77</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreFlusher.java">org/apache/hadoop/hbase/regionserver/StoreFlusher.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>
@@ -52850,154 +52844,154 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreScanner.java">org/apache/hadoop/hbase/regionserver/StoreScanner.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.KeyValue' import.</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>187</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>230</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>393</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>394</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>397</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>545</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>546</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>
 <td>Method length is 225 lines (max allowed is 150).</td>
 <td>549</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>758</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>890</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>916</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>1061</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>1062</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>1063</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>1064</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>1079</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>1081</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>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>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>1215</td></tr>
+<td>1178</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>1215</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>1217</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StoreUtils.java">org/apache/hadoop/hbase/regionserver/StoreUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -53006,25 +53000,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StorefileRefresherChore.java">org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.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.master.cleaner.TimeToLiveHFileCleaner' import.</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -53033,19 +53027,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StripeMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53054,13 +53048,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StripeStoreConfig.java">org/apache/hadoop/hbase/regionserver/StripeStoreConfig.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>
@@ -53069,13 +53063,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StripeStoreEngine.java">org/apache/hadoop/hbase/regionserver/StripeStoreEngine.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>
@@ -53084,106 +53078,106 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StripeStoreFileManager.java">org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'stripeEndRows' must be private and have accessor methods.</td>
 <td>95</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'stripeFiles' must be private and have accessor methods.</td>
 <td>102</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'level0Files' must be private and have accessor methods.</td>
 <td>104</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'allFilesCached' must be private and have accessor methods.</td>
 <td>107</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>512</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>513</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>517</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>587</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>595</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>736</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>900</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>917</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>921</td></tr>
+<td>917</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>921</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>963</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.StripeStoreFlusher.java">org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53192,61 +53186,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestAtomicOperation.java">org/apache/hadoop/hbase/regionserver/TestAtomicOperation.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>'&quot; The Universe, and Everything&quot;' has incorrect indentation level 4, expected level should be 6.</td>
 <td>144</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>283</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>293</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>392</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>393</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>577</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
 <td>Empty statement.</td>
 <td>578</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def rcurly' has incorrect indentation level 3, expected level should be 4.</td>
 <td>702</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -53255,19 +53249,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestBlocksScanned.java">org/apache/hadoop/hbase/regionserver/TestBlocksScanned.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>119</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
@@ -53276,19 +53270,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestBulkLoad.java">org/apache/hadoop/hbase/regionserver/TestBulkLoad.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>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 12, 14.</td>
 <td>157</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>
@@ -53297,43 +53291,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestCellFlatSet.java">org/apache/hadoop/hbase/regionserver/TestCellFlatSet.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>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>287</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>
@@ -53342,13 +53336,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestCellSkipListSet.java">org/apache/hadoop/hbase/regionserver/TestCellSkipListSet.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>
@@ -53357,19 +53351,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestClearRegionBlockCache.java">org/apache/hadoop/hbase/regionserver/TestClearRegionBlockCache.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>'while' construct must use '{}'s.</td>
 <td>181</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
@@ -53378,43 +53372,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestColumnSeeking.java">org/apache/hadoop/hbase/regionserver/TestColumnSeeking.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>152</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>168</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
 <td>Empty statement.</td>
 <td>169</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>267</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>283</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
@@ -53423,61 +53417,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestCompactingMemStore.java">org/apache/hadoop/hbase/regionserver/TestCompactingMemStore.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 103).</td>
 <td>103</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>161</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>162</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>202</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>222</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>248</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>310</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 5, expected level should be 6.</td>
 <td>371</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -53486,103 +53480,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestCompactingToCellFlatMapMemStore.java">org/apache/hadoop/hbase/regionserver/TestCompactingToCellFlatMapMemStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>130</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>164</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>187</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>323</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>334</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>342</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>357</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>402</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>'lambda arguments' has incorrect indentation level 8, expected level should be 6.</td>
 <td>404</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'lambda arguments' has incorrect indentation level 8, expected level should be 6.</td>
 <td>406</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>422</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'lambda arguments' has incorrect indentation level 8, expected level should be 6.</td>
 <td>424</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>'lambda arguments' has incorrect indentation level 8, expected level should be 6.</td>
 <td>426</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>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>'lambda arguments' has incorrect indentation level 8, expected level should be 6.</td>
 <td>441</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>
@@ -53591,31 +53585,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestCompaction.java">org/apache/hadoop/hbase/regionserver/TestCompaction.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>157</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>202</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>616</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>
@@ -53624,49 +53618,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestCompactionState.java">org/apache/hadoop/hbase/regionserver/TestCompactionState.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>126</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>127</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>128</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>130</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>131</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>194</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53675,103 +53669,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestCompoundBloomFilter.java">org/apache/hadoop/hbase/regionserver/TestCompoundBloomFilter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 51.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 51.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>92</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 30.</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>105</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 51.</td>
 <td>106</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 10 should have line break after.</td>
 <td>107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>109</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 55.</td>
 <td>110</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 10 should have line break after.</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>117</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>148</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>331</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>
@@ -53780,37 +53774,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 82.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 83.</td>
 <td>194</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 82.</td>
 <td>208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>245</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>
@@ -53819,13 +53813,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestDateTieredCompactionPolicyOverflow.java">org/apache/hadoop/hbase/regionserver/TestDateTieredCompactionPolicyOverflow.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>
@@ -53834,109 +53828,109 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestDefaultMemStore.java">org/apache/hadoop/hbase/regionserver/TestDefaultMemStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>162</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>172</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>238</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>239</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>297</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>510</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>529</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>568</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>822</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>862</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>905</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>981</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>1013</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>1023</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>'(' should be on the previous line.</td>
 <td>1044</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>1091</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53945,13 +53939,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestFSErrorsExposed.java">org/apache/hadoop/hbase/regionserver/TestFSErrorsExposed.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -53960,26 +53954,26 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestFailedAppendAndSync.java">org/apache/hadoop/hbase/regionserver/TestFailedAppendAndSync.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>262</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>270</td></tr>
+<td>262</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>270</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
@@ -53987,250 +53981,250 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestHMobStore.java">org/apache/hadoop/hbase/regionserver/TestHMobStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>124</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>211</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>246</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>290</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>336</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>380</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>463</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>464</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>475</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>476</td></tr>
+<td>475</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>476</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>477</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestHRegion.java">org/apache/hadoop/hbase/regionserver/TestHRegion.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>269</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>305</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>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>
 <td>'throws' has incorrect indentation level 6, expected level should be 8.</td>
 <td>1213</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1476</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>1478</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1495</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>1497</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>3638</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>4301</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>4371</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
 <td>Empty statement.</td>
 <td>4372</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>4554</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class PutThread should be declared as final.</td>
 <td>4565</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>4741</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>4803</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>4954</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>4965</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>4966</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>4984</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>5017</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>5141</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>5227</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>5286</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>5678</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>
 <td>Method length is 160 lines (max allowed is 150).</td>
 <td>6120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>6670</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>
@@ -54239,58 +54233,58 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestHRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/TestHRegionFileSystem.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>286</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>292</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>298</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>331</td></tr>
+<td>298</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>331</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>343</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestHRegionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestHRegionOnCluster.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>152</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -54299,103 +54293,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestHRegionReplayEvents.java">org/apache/hadoop/hbase/regionserver/TestHRegionReplayEvents.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>313</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>'=' has incorrect indentation level 6, expected level should be 8.</td>
 <td>372</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>'=' has incorrect indentation level 6, expected level should be 8.</td>
 <td>374</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>'=' has incorrect indentation level 6, expected level should be 8.</td>
 <td>474</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>'=' has incorrect indentation level 6, expected level should be 8.</td>
 <td>580</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>'=' has incorrect indentation level 6, expected level should be 8.</td>
 <td>670</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>'=' has incorrect indentation level 6, expected level should be 8.</td>
 <td>782</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>784</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>881</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>885</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>1041</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>1158</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>1459</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>1583</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1641</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>
@@ -54404,292 +54398,292 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestHRegionServerBulkLoad.java">org/apache/hadoop/hbase/regionserver/TestHRegionServerBulkLoad.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>188</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>253</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>260</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>misc</td>
-<td>ArrayTypeStyle</td>
-<td>Array brackets at illegal position.</td>
-<td>279</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>280</td></tr>
+<td>279</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
+<td>280</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>390</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestHStore.java">org/apache/hadoop/hbase/regionserver/TestHStore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>165</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>246</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>475</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>513</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>'ColumnFamilyDescriptorBuilder' has incorrect indentation level 4, expected level should be 6.</td>
 <td>544</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>568</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>607</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 4, expected level should be 6.</td>
 <td>755</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 4, expected level should be 6.</td>
 <td>767</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>796</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>797</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>798</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>799</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>816</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>956</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>1470</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>1471</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 23 should have line break after.</td>
 <td>1845</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 30 should have line break after.</td>
 <td>1848</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 39 should have line break after.</td>
 <td>1851</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 35 should have line break after.</td>
 <td>1854</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 31 should have line break after.</td>
 <td>1857</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 35 should have line break after.</td>
 <td>1860</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>1869</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 49 should have line break after.</td>
 <td>1872</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 54 should have line break after.</td>
 <td>1875</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 65 should have line break after.</td>
 <td>1878</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 47 should have line break after.</td>
 <td>1881</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 47 should have line break after.</td>
 <td>1884</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 25 should have line break after.</td>
 <td>1887</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 29 should have line break after.</td>
 <td>1890</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 40 should have line break after.</td>
 <td>1893</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 43 should have line break after.</td>
 <td>1896</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 32 should have line break after.</td>
 <td>1899</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 34 should have line break after.</td>
 <td>1902</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 38 should have line break after.</td>
 <td>1905</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 43 should have line break after.</td>
 <td>1908</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 52 should have line break after.</td>
 <td>1911</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1914</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>
@@ -54698,13 +54692,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestJoinedScanners.java">org/apache/hadoop/hbase/regionserver/TestJoinedScanners.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>
@@ -54713,13 +54707,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestKeyValueScanFixture.java">org/apache/hadoop/hbase/regionserver/TestKeyValueScanFixture.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -54728,13 +54722,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestLogRoller.java">org/apache/hadoop/hbase/regionserver/TestLogRoller.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>
@@ -54743,31 +54737,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestMajorCompaction.java">org/apache/hadoop/hbase/regionserver/TestMajorCompaction.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>163</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>440</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>495</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -54776,13 +54770,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestMasterAddressTracker.java">org/apache/hadoop/hbase/regionserver/TestMasterAddressTracker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -54791,25 +54785,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestMetricsRegion.java">org/apache/hadoop/hbase/regionserver/TestMetricsRegion.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>104</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>
@@ -54818,19 +54812,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestMetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/TestMetricsRegionServer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>124</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>
@@ -54839,37 +54833,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestMultiColumnScanner.java">org/apache/hadoop/hbase/regionserver/TestMultiColumnScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 56.</td>
 <td>99</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>161</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -54878,43 +54872,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestMultiLogThreshold.java">org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>113</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>114</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>115</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>117</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>
@@ -54923,13 +54917,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestMultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/TestMultiVersionConcurrencyControl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -54938,19 +54932,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestNotCleanupCompactedFileWhenRegionWarmup.java">org/apache/hadoop/hbase/regionserver/TestNotCleanupCompactedFileWhenRegionWarmup.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>46</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>
@@ -54959,76 +54953,76 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestPerColumnFamilyFlush.java">org/apache/hadoop/hbase/regionserver/TestPerColumnFamilyFlush.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 106).</td>
-<td>487</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>488</td></tr>
+<td>487</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>488</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>489</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRSKilledWhenInitializing.java">org/apache/hadoop/hbase/regionserver/TestRSKilledWhenInitializing.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>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>89</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>132</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>179</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 4, expected level should be 6.</td>
 <td>202</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>
@@ -55037,82 +55031,82 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRecoveredEdits.java">org/apache/hadoop/hbase/regionserver/TestRecoveredEdits.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>158</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>159</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>160</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>161</td></tr>
+<td>160</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>161</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>163</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionIncrement.java">org/apache/hadoop/hbase/regionserver/TestRegionIncrement.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>101</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>177</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>197</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>200</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>230</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -55121,49 +55115,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionMergeTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestRegionMergeTransactionOnCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>159</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>396</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>399</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 140).</td>
 <td>401</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 139).</td>
 <td>402</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 146).</td>
 <td>403</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>
@@ -55172,13 +55166,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionOpen.java">org/apache/hadoop/hbase/regionserver/TestRegionOpen.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -55187,19 +55181,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionReplicaFailover.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicaFailover.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 52, 53.</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -55208,19 +55202,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionReplicasWithRestartScenarios.java">org/apache/hadoop/hbase/regionserver/TestRegionReplicasWithRestartScenarios.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>50</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>
@@ -55229,13 +55223,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionServerAbort.java">org/apache/hadoop/hbase/regionserver/TestRegionServerAbort.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -55244,19 +55238,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionServerHostname.java">org/apache/hadoop/hbase/regionserver/TestRegionServerHostname.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>149</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>
@@ -55265,31 +55259,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionServerMetrics.java">org/apache/hadoop/hbase/regionserver/TestRegionServerMetrics.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.junit.Assert.assertNotEquals.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>175</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 lcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>570</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>
@@ -55298,31 +55292,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionServerNoMaster.java">org/apache/hadoop/hbase/regionserver/TestRegionServerNoMaster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>133</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>293</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>298</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>
@@ -55331,26 +55325,26 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionServerOnlineConfigChange.java">org/apache/hadoop/hbase/regionserver/TestRegionServerOnlineConfigChange.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>105</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>131</td></tr>
+<td>105</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>131</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>
@@ -55358,13 +55352,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionServerReadRequestMetrics.java">org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.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>
@@ -55373,25 +55367,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRegionServerReportForDuty.java">org/apache/hadoop/hbase/regionserver/TestRegionServerReportForDuty.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.log4j.Appender' import.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>185</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>
@@ -55400,43 +55394,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestResettingCounters.java">org/apache/hadoop/hbase/regionserver/TestResettingCounters.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>'for' construct must use '{}'s.</td>
 <td>73</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>103</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>108</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -55445,97 +55439,97 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestReversibleScanners.java">org/apache/hadoop/hbase/regionserver/TestReversibleScanners.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 65.</td>
 <td>175</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>204</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>209</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>219</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>236</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 65.</td>
 <td>265</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>275</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>353</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>359</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>449</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>583</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>609</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>610</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>628</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -55544,13 +55538,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestRowTooBig.java">org/apache/hadoop/hbase/regionserver/TestRowTooBig.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -55559,19 +55553,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestScanWithBloomError.java">org/apache/hadoop/hbase/regionserver/TestScanWithBloomError.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>160</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -55580,46 +55574,46 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestScannerHeartbeatMessages.java">org/apache/hadoop/hbase/regionserver/TestScannerHeartbeatMessages.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>596</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>598</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>615</td></tr>
+<td>598</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>615</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>617</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestScannerRetriableFailure.java">org/apache/hadoop/hbase/regionserver/TestScannerRetriableFailure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -55628,19 +55622,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestScannerWithBulkload.java">org/apache/hadoop/hbase/regionserver/TestScannerWithBulkload.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>'else' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>187</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>
@@ -55649,19 +55643,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestSeekOptimizations.java">org/apache/hadoop/hbase/regionserver/TestSeekOptimizations.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>blocks</td>
 <td>EmptyBlock</td>
@@ -55670,19 +55664,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestServerNonceManager.java">org/apache/hadoop/hbase/regionserver/TestServerNonceManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>232</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -55691,13 +55685,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestSettingTimeoutOnBlockingPoint.java">org/apache/hadoop/hbase/regionserver/TestSettingTimeoutOnBlockingPoint.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -55706,43 +55700,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestSplitLogWorker.java">org/apache/hadoop/hbase/regionserver/TestSplitLogWorker.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>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>181</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>184</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>185</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>187</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>'finally' child has incorrect indentation level 5, expected level should be 6.</td>
 <td>265</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>
@@ -55751,130 +55745,130 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestSplitTransactionOnCluster.java">org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.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>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>450</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>664</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>690</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>913</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>914</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>915</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>916</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>920</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>'ZooKeeperConnectionException' has incorrect indentation level 2, expected level should be 4.</td>
 <td>921</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>951</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>969</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>970</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>972</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>978</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>979</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>1021</td></tr>
+<td>979</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>1021</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>1065</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestTags.java">org/apache/hadoop/hbase/regionserver/TestTags.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>234</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -55883,19 +55877,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestTimestampFilterSeekHint.java">org/apache/hadoop/hbase/regionserver/TestTimestampFilterSeekHint.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -55904,25 +55898,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestWALLockup.java">org/apache/hadoop/hbase/regionserver/TestWALLockup.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>158</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>268</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>
@@ -55931,13 +55925,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestWALMonotonicallyIncreasingSeqId.java">org/apache/hadoop/hbase/regionserver/TestWALMonotonicallyIncreasingSeqId.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -55946,55 +55940,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TestWalAndCompactingMemStoreFlush.java">org/apache/hadoop/hbase/regionserver/TestWalAndCompactingMemStoreFlush.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 230 lines (max allowed is 150).</td>
 <td>138</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>
 <td>Method length is 254 lines (max allowed is 150).</td>
 <td>372</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>888</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>890</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>892</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>895</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>999</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>
@@ -56003,19 +55997,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.TimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TimeRangeTracker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>189</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>
@@ -56024,13 +56018,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.CompactionConfiguration.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.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>
@@ -56039,25 +56033,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'currentCompactedKVs' must be private and have accessor methods.</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'totalCompactedSize' must be private and have accessor methods.</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -56066,13 +56060,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.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>
@@ -56081,13 +56075,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.CompactionRequester.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequester.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>
@@ -56096,73 +56090,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.Compactor.java">org/apache/hadoop/hbase/regionserver/compactions/Compactor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>99</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'maxKeyCount' must be private and have accessor methods.</td>
 <td>120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'earliestPutTs' must be private and have accessor methods.</td>
 <td>122</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'latestPutTs' must be private and have accessor methods.</td>
 <td>124</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'maxSeqId' must be private and have accessor methods.</td>
 <td>126</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'maxMVCCReadpoint' must be private and have accessor methods.</td>
 <td>128</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'maxTagsLength' must be private and have accessor methods.</td>
 <td>130</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'minSeqIdToKeep' must be private and have accessor methods.</td>
 <td>132</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>199</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>206</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>
@@ -56171,25 +56165,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.CurrentHourProvider.java">org/apache/hadoop/hbase/regionserver/compactions/CurrentHourProvider.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class CurrentHourProvider should be declared as final.</td>
 <td>27</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 33 should have line break after.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -56198,37 +56192,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/DefaultCompactor.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>'method def modifier' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>52</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>56</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>57</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 6, expected level should be one of the following: 2, 4.</td>
 <td>58</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -56237,25 +56231,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/OffPeakHours.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.conf.Configuration' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 46 should have line break after.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -56264,82 +56258,82 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.PerfTestCompactionPolicies.java">org/apache/hadoop/hbase/regionserver/compactions/PerfTestCompactionPolicies.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>62</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>63</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>68</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>69</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>71</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>72</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
-<td>73</td></tr>
+<td>72</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 8, expected level should be 6.</td>
+<td>73</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
 <td>'array initialization rcurly' has incorrect indentation level 5, expected level should be one of the following: 4, 6.</td>
 <td>74</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.RatioBasedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/RatioBasedCompactionPolicy.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>
@@ -56348,13 +56342,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.SortedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/SortedCompactionPolicy.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>
@@ -56363,13 +56357,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.SpikyFileListGenerator.java">org/apache/hadoop/hbase/regionserver/compactions/SpikyFileListGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -56378,68 +56372,68 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.StripeCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactionPolicy.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>135</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>145</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>153</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>186</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>204</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>301</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>320</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>326</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>369</td></tr>
+<td>326</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>369</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>
@@ -56447,13 +56441,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.StripeCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -56462,19 +56456,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.compactions.TestCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/TestCompactor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>58</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -56483,13 +56477,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.handler.OpenPriorityRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenPriorityRegionHandler.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>
@@ -56498,19 +56492,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.handler.OpenRegionHandler.java">org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.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 102).</td>
 <td>66</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -56519,13 +56513,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.handler.ParallelSeekHandler.java">org/apache/hadoop/hbase/regionserver/handler/ParallelSeekHandler.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>
@@ -56534,139 +56528,139 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.handler.WALSplitterHandler.java">org/apache/hadoop/hbase/regionserver/handler/WALSplitterHandler.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.Server' 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>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>77</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>82</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 10.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>89</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>93</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' has incorrect indentation level 8, expected level should be 10.</td>
 <td>94</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>95</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 rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>98</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>99</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -56675,46 +56669,46 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.ColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ColumnTracker.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.regionserver.ShipperListener' import.</td>
 <td>25</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>117</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>125</td></tr>
+<td>117</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>125</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>134</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.CompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/CompactionScanQueryMatcher.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>
@@ -56723,13 +56717,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.DeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.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>
@@ -56738,13 +56732,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.DropDeletesCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/DropDeletesCompactionScanQueryMatcher.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>
@@ -56753,13 +56747,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.ExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ExplicitColumnTracker.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>
@@ -56768,13 +56762,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.IncludeAllCompactionQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/IncludeAllCompactionQueryMatcher.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>
@@ -56783,13 +56777,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.MajorCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/MajorCompactionScanQueryMatcher.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>
@@ -56798,13 +56792,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.MinorCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/MinorCompactionScanQueryMatcher.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>
@@ -56813,127 +56807,127 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.NewVersionBehaviorTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/NewVersionBehaviorTracker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.KeyValue.Type' 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>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher.MatchCode' import.</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'ts' must be private and have accessor methods.</td>
 <td>110</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'mvcc' must be private and have accessor methods.</td>
 <td>111</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>165</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>200</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>201</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>203</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>204</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>205</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>206</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>209</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>213</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>214</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>215</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>216</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>217</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>
@@ -56942,19 +56936,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.NormalUserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/NormalUserScanQueryMatcher.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.KeepDeletedCells' import.</td>
 <td>24</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>
@@ -56963,13 +56957,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.RawScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/RawScanQueryMatcher.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>
@@ -56978,13 +56972,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.ScanDeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanDeleteTracker.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>
@@ -56993,43 +56987,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.ScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>142</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>143</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>275</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>303</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>321</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>
@@ -57038,19 +57032,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.ScanWildcardColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/ScanWildcardColumnTracker.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.KeyValueUtil' import.</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -57059,13 +57053,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.StripeCompactionScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.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>
@@ -57074,13 +57068,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.TestExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestExplicitColumnTracker.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>
@@ -57089,13 +57083,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.TestNewVersionBehaviorTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestNewVersionBehaviorTracker.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>
@@ -57104,13 +57098,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.TestScanDeleteTracker.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestScanDeleteTracker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>AvoidStarImport</td>
@@ -57119,130 +57113,130 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.TestUserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/TestUserScanQueryMatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>58</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>167</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 45.</td>
 <td>174</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 45.</td>
 <td>175</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 45.</td>
 <td>176</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 45.</td>
 <td>177</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
 <td>186</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
 <td>187</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
 <td>188</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
 <td>189</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
 <td>190</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>211</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
 <td>230</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
 <td>231</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
-<td>232</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
-<td>233</td></tr>
+<td>232</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
+<td>233</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 38.</td>
 <td>234</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.querymatcher.UserScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/querymatcher/UserScanQueryMatcher.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.KeyValueUtil' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -57251,19 +57245,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.snapshot.FlushSnapshotSubprocedure.java">org/apache/hadoop/hbase/regionserver/snapshot/FlushSnapshotSubprocedure.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.IsolationLevel' import.</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -57272,127 +57266,127 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.snapshot.RegionServerSnapshotManager.java">org/apache/hadoop/hbase/regionserver/snapshot/RegionServerSnapshotManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>40</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.RegionReplicaUtil' import.</td>
 <td>42</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.snapshot.SnapshotCreationException' import.</td>
 <td>57</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>95</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def modifier' has incorrect indentation level 3, expected level should be 2.</td>
 <td>110</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>131</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>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>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>187</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>188</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>190</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>192</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>205</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>206</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>220</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>223</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>312</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>357</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>372</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -57401,13 +57395,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.throttle.CompactionThroughputControllerFactory.java">org/apache/hadoop/hbase/regionserver/throttle/CompactionThroughputControllerFactory.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>
@@ -57416,13 +57410,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.throttle.FlushThroughputControllerFactory.java">org/apache/hadoop/hbase/regionserver/throttle/FlushThroughputControllerFactory.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>
@@ -57431,13 +57425,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.throttle.NoLimitThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/NoLimitThroughputController.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>
@@ -57446,13 +57440,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.throttle.PressureAwareCompactionThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareCompactionThroughputController.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>
@@ -57461,13 +57455,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.throttle.PressureAwareFlushThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareFlushThroughputController.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>
@@ -57476,19 +57470,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.throttle.PressureAwareThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/PressureAwareThroughputController.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.regionserver.RegionServerServices' 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>sizes</td>
 <td>LineLength</td>
@@ -57497,13 +57491,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.throttle.ThroughputController.java">org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.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>
@@ -57512,13 +57506,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -57527,13 +57521,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -57542,52 +57536,52 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AbstractTestFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestFSWAL.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>206</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>264</td></tr>
+<td>206</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>264</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>409</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AbstractTestLogRolling.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestLogRolling.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>196</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>293</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -57596,19 +57590,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AbstractTestProtobufLog.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestProtobufLog.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>89</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>
@@ -57617,13 +57611,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AbstractTestWALReplay.java">org/apache/hadoop/hbase/regionserver/wal/AbstractTestWALReplay.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>
@@ -57632,25 +57626,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.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>'if' has incorrect indentation level 6, expected level should be 4.</td>
 <td>640</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>641</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>
@@ -57659,19 +57653,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.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>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>255</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>
@@ -57680,13 +57674,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.CompressionContext.java">org/apache/hadoop/hbase/regionserver/wal/CompressionContext.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>
@@ -57695,55 +57689,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.Compressor.java">org/apache/hadoop/hbase/regionserver/wal/Compressor.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.conf.Configuration' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.wal.WAL' import.</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>44</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>88</td></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>105</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>115</td></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>142</td></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>
@@ -57752,73 +57746,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.FSHLog.java">org/apache/hadoop/hbase/regionserver/wal/FSHLog.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>111</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>112</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>121</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>235</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 115).</td>
 <td>264</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>558</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>786</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>865</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>867</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 112).</td>
 <td>1052</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>
@@ -57827,13 +57821,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.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>
@@ -57842,13 +57836,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.FailedSyncBeforeLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedSyncBeforeLogCloseException.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>
@@ -57857,43 +57851,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.InstrumentedLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/InstrumentedLogWriter.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>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 6, expected level should be 4.</td>
 <td>41</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>43</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>44</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 6, expected level should be 4.</td>
 <td>46</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>
@@ -57902,154 +57896,154 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.MetricsWAL.java">org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.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.IOException' import.</td>
 <td>24</td></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.hadoop.hbase.wal.WALEdit' import.</td>
-<td>29</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
+<td>Wrong order for 'org.apache.hadoop.hbase.wal.WALEdit' import.</td>
+<td>30</td></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.hadoop.hbase.CompatibilitySingletonFactory' import.</td>
-<td>31</td></tr></table></div>
+<td>32</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.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.fs.FileSystem' import.</td>
 <td>31</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.fs.FSDataInputStream' import.</td>
 <td>32</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.HBaseInterfaceAudience' 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>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>187</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>192</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>193</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 5, expected level should be 4.</td>
 <td>193</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' has incorrect indentation level 5, expected level should be 4.</td>
 <td>194</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 7, expected level should be 6.</td>
 <td>196</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 rcurly' has incorrect indentation level 5, expected level should be 4.</td>
 <td>197</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>198</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 5, expected level should be 4.</td>
 <td>199</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 7, expected level should be 6.</td>
 <td>200</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 rcurly' has incorrect indentation level 5, expected level should be 4.</td>
 <td>201</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>202</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 194).</td>
 <td>238</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>261</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>266</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -58058,13 +58052,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.ReaderBase.java">org/apache/hadoop/hbase/regionserver/wal/ReaderBase.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>
@@ -58073,19 +58067,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.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.fs.FSDataInputStream' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -58094,13 +58088,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogWriter.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>
@@ -58109,19 +58103,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.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.conf.Configuration' import.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -58130,82 +58124,82 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.SequenceIdAccounting.java">org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>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>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>155</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>167</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>168</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>169</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>265</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>287</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>JavadocTagContinuationIndentation</td>
-<td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>288</td></tr>
 <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>289</td></tr>
+<td>288</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>289</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>290</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.TestAsyncFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWAL.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>
@@ -58214,13 +58208,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.TestAsyncWALReplay.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplay.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>
@@ -58229,31 +58223,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.TestLogRolling.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 174 lines (max allowed is 150).</td>
 <td>107</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>422</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>528</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -58262,31 +58256,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.TestLogRollingNoCluster.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.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>82</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>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>184</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -58295,19 +58289,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.TestWALConfiguration.java">org/apache/hadoop/hbase/regionserver/wal/TestWALConfiguration.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.IOException' import.</td>
 <td>41</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>
@@ -58316,19 +58310,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.java">org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.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>93</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>
@@ -58337,38 +58331,38 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.KeyValue' import.</td>
 <td>29</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.codec.BaseDecoder' import.</td>
 <td>32</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization lcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
-<td>107</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization lcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
-<td>125</td></tr>
+<td>107</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization lcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
+<td>125</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>
@@ -58376,13 +58370,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -58391,13 +58385,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.WALUtil.java">org/apache/hadoop/hbase/regionserver/wal/WALUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -58406,25 +58400,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.BaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>54</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>62</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>
@@ -58433,13 +58427,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.BulkLoadCellFilter.java">org/apache/hadoop/hbase/replication/BulkLoadCellFilter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -58448,25 +58442,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.ClusterMarkingEntryFilter.java">org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.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.wal.WALEdit' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.wal.WAL.Entry' import.</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -58475,19 +58469,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.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.Abortable' import.</td>
 <td>37</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>
@@ -58496,25 +58490,25 @@
 <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>35</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>
@@ -58523,13 +58517,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="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>
@@ -58538,79 +58532,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="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 14, expected level should be one of the following: 12, 27.</td>
 <td>204</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be one of the following: 8, 37.</td>
 <td>215</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be one of the following: 8, 44.</td>
 <td>218</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 14, expected level should be one of the following: 12, 27.</td>
 <td>318</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be one of the following: 8, 37.</td>
 <td>338</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be one of the following: 8, 44.</td>
 <td>342</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 14, expected level should be one of the following: 12, 27.</td>
 <td>374</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be one of the following: 8, 37.</td>
 <td>384</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 modifier' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>746</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 12, expected level should be one of the following: 8, 10.</td>
 <td>748</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>749</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>
@@ -58619,43 +58613,43 @@
 <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="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>'method def modifier' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>228</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 12, expected level should be one of the following: 8, 10.</td>
 <td>230</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</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>'object def rcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>232</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>284</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>
@@ -58664,19 +58658,19 @@
 <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>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 1, expected level should be 2.</td>
 <td>277</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -58685,13 +58679,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="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -58700,13 +58694,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="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -58715,13 +58709,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestReplicationStatusSink.java">org/apache/hadoop/hbase/replication/TestReplicationStatusSink.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>
@@ -58730,40 +58724,40 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestVerifyReplicationAdjunct.java">org/apache/hadoop/hbase/replication/TestVerifyReplicationAdjunct.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
-<td>269</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
-<td>274</td></tr>
+<td>269</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
+<td>274</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 8, expected level should be one of the following: 6, 26.</td>
 <td>275</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.TestZKReplicationPeerStorage.java">org/apache/hadoop/hbase/replication/TestZKReplicationPeerStorage.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -58772,19 +58766,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="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.wal.WAL.Entry' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -58793,13 +58787,13 @@
 <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="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -58808,13 +58802,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>
@@ -58823,44 +58817,44 @@
 <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">
-<td><img src="images/icon_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">
 <td><img src="images/icon_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>
+<td>151</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>152</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
@@ -58868,19 +58862,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="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>22</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>
@@ -58889,19 +58883,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="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>30</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>
@@ -58910,24 +58904,18 @@
 <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="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>201</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>214</td></tr></table></div>
+<td>166</td></tr></table></div>
 <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">
@@ -58945,12 +58933,6 @@
 <td>23</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>52</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
@@ -58958,13 +58940,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.ReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.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>
@@ -58973,19 +58955,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.ReplicationSource.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>70</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>
@@ -58994,19 +58976,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceFactory.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceFactory.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.replication.ReplicationQueueInfo' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -59015,13 +58997,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceInterface.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.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>
@@ -59030,46 +59012,46 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>179</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>180</td></tr>
+<td>179</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>180</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>186</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.ReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.EnvironmentEdgeManager' import.</td>
 <td>21</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -59078,100 +59060,100 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 102).</td>
-<td>147</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>148</td></tr>
+<td>147</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>148</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>sizes</td>
+<td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>149</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.TestReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>140</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>149</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>159</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>177</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>239</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>246</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>265</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>293</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>445</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>
@@ -59180,13 +59162,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.TestWALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -59195,13 +59177,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.TestWALEntryStream.java">org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.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>
@@ -59210,13 +59192,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.WALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/WALEntrySinkFilter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -59225,19 +59207,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.WALEntryStream.java">org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -59246,25 +59228,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.ExistsResource.java">org/apache/hadoop/hbase/rest/ExistsResource.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 'javax.ws.rs.core.Response.ResponseBuilder' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>48</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>
@@ -59273,25 +59255,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.MetricsREST.java">org/apache/hadoop/hbase/rest/MetricsREST.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>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
 <td>Redundant import from the same package - org.apache.hadoop.hbase.rest.MetricsRESTSource.</td>
 <td>25</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>
@@ -59300,73 +59282,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.MultiRowResource.java">org/apache/hadoop/hbase/rest/MultiRowResource.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>51</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>52</td></tr>
+<td>51</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>52</td></tr>
+<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>53</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.NamespacesInstanceResource.java">org/apache/hadoop/hbase/rest/NamespacesInstanceResource.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>66</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>74</td></tr>
+<td>66</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>74</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>87</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.NamespacesResource.java">org/apache/hadoop/hbase/rest/NamespacesResource.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.rest.model.NamespacesModel' import.</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -59375,13 +59357,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.ProtobufMessageHandler.java">org/apache/hadoop/hbase/rest/ProtobufMessageHandler.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -59390,37 +59372,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.RESTServer.java">org/apache/hadoop/hbase/rest/RESTServer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'conf' must be private and have accessor methods.</td>
 <td>108</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>239</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>277</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>279</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>
@@ -59429,37 +59411,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.RESTServlet.java">org/apache/hadoop/hbase/rest/RESTServlet.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Admin' import.</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>76</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>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>155</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -59468,19 +59450,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.RegionsResource.java">org/apache/hadoop/hbase/rest/RegionsResource.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>60</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>
@@ -59489,25 +59471,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.RootResource.java">org/apache/hadoop/hbase/rest/RootResource.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 'javax.ws.rs.core.Response.ResponseBuilder' import.</td>
 <td>32</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.TableName' import.</td>
 <td>37</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>
@@ -59516,319 +59498,319 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.RowResource.java">org/apache/hadoop/hbase/rest/RowResource.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>76</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>77</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>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>227</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>228</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 10, expected level should be 12.</td>
 <td>229</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>230</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 10, expected level should be 12.</td>
 <td>231</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>267</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>268</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>269</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>270</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>271</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>313</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>338</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>339</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>340</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>341</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>342</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>403</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>405</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>444</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>445</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>446</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>447</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>448</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>561</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>562</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>563</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>564</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 6, 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>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>691</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>692</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>693</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>694</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>695</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>714</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>785</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>786</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>787</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>788</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>789</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>808</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>848</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>882</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>883</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>884</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>885</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -59837,181 +59819,181 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.RowSpec.java">org/apache/hadoop/hbase/rest/RowSpec.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.HConstants' import.</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>95</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>237</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>238</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>'while' has incorrect indentation level 8, expected level should be 10.</td>
 <td>239</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>'while' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>240</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be 12.</td>
 <td>241</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>242</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>243</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 rcurly' has incorrect indentation level 10, expected level should be 12.</td>
 <td>244</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>'while' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>245</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>'while rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>246</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>247</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>248</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>249</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>250</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>'while' has incorrect indentation level 8, expected level should be 10.</td>
 <td>251</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>'while' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>252</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 10, expected level should be 12.</td>
 <td>253</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>254</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 12, expected level should be 14.</td>
 <td>255</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 rcurly' has incorrect indentation level 10, expected level should be 12.</td>
 <td>256</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>'while' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>257</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>'while rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>258</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>259</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>260</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>261</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>
@@ -60020,13 +60002,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.ScannerInstanceResource.java">org/apache/hadoop/hbase/rest/ScannerInstanceResource.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>
@@ -60035,31 +60017,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.ScannerResource.java">org/apache/hadoop/hbase/rest/ScannerResource.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 'com.fasterxml.jackson.core.JsonParseException' import.</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'Collections' has incorrect indentation level 3, expected level should be 4.</td>
 <td>55</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>61</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60068,19 +60050,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.ScannerResultGenerator.java">org/apache/hadoop/hbase/rest/ScannerResultGenerator.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 102).</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -60089,13 +60071,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.StorageClusterStatusResource.java">org/apache/hadoop/hbase/rest/StorageClusterStatusResource.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60104,13 +60086,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.StorageClusterVersionResource.java">org/apache/hadoop/hbase/rest/StorageClusterVersionResource.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -60119,46 +60101,46 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.TableResource.java">org/apache/hadoop/hbase/rest/TableResource.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Scan' import.</td>
 <td>35</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>51</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>52</td></tr>
+<td>51</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>52</td></tr>
+<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>66</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.TableScanResource.java">org/apache/hadoop/hbase/rest/TableScanResource.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>
@@ -60167,13 +60149,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.TestScannersWithLabels.java">org/apache/hadoop/hbase/rest/TestScannersWithLabels.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>
@@ -60182,25 +60164,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.VersionResource.java">org/apache/hadoop/hbase/rest/VersionResource.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 'javax.ws.rs.core.Response.ResponseBuilder' import.</td>
 <td>32</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.rest.model.VersionModel' import.</td>
 <td>37</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>
@@ -60209,826 +60191,826 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.client.Client.java">org/apache/hadoop/hbase/rest/client/Client.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>165</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>220</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>234</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>260</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>322</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>334</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>351</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>362</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>373</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>385</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>400</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>418</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>423</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>451</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>470</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>484</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>532</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>535</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>547</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>550</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>572</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>586</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>634</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>637</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>649</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>652</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>672</td></tr>
+<td>652</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>672</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
 <td>683</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.client.RemoteAdmin.java">org/apache/hadoop/hbase/rest/client/RemoteAdmin.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.conf.Configuration' import.</td>
 <td>35</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>62</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>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>125</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>127</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>128</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>129</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>130</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>131</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>132</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>133</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>135</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>137</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>138</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>139</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 111).</td>
 <td>148</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>152</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>153</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 6, expected level should be 4.</td>
 <td>154</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 6.</td>
 <td>155</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 6.</td>
 <td>156</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 6, expected level should be 4.</td>
 <td>157</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>167</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>168</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>169</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>171</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>172</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>173</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>174</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>175</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>176</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>177</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>178</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>179</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>180</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>181</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>209</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>214</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>216</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>219</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>220</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>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>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>222</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>223</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>224</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>225</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>226</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>227</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>228</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>229</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>230</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>257</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>258</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>259</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>260</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>261</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>262</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>263</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>264</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>265</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>266</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>267</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>268</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>269</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>298</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>299</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>300</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>301</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>302</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>303</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>304</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>305</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>306</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>307</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>308</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>343</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>344</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>345</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>346</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>347</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>348</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>349</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>350</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>351</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>352</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>353</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>382</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>383</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>384</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>385</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>386</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>387</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 10.</td>
 <td>388</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>389</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>390</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>391</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 10.</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>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>393</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>394</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>
@@ -61037,13 +61019,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.client.TestRemoteTable.java">org/apache/hadoop/hbase/rest/client/TestRemoteTable.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -61052,112 +61034,112 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.CellModel.java">org/apache/hadoop/hbase/rest/model/CellModel.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>86</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>87</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>95</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>96</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>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>105</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>114</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>115</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>116</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>126</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>127</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>128</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>129</td></tr>
+<td>128</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
+<td>NonEmptyAtclauseDescription</td>
+<td>At-clause should have a non-empty description.</td>
+<td>129</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>154</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.CellSetModel.java">org/apache/hadoop/hbase/rest/model/CellSetModel.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.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations' import.</td>
 <td>38</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>
@@ -61166,37 +61148,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.NamespacesInstanceModel.java">org/apache/hadoop/hbase/rest/model/NamespacesInstanceModel.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Admin' import.</td>
 <td>35</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>72</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>82</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 23 should have line break after.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -61205,25 +61187,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.NamespacesModel.java">org/apache/hadoop/hbase/rest/model/NamespacesModel.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Admin' 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>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'com.fasterxml.jackson.annotation.JsonProperty' import.</td>
 <td>39</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>
@@ -61232,751 +61214,751 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.ScannerModel.java">org/apache/hadoop/hbase/rest/model/ScannerModel.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Scan' import.</td>
 <td>37</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hbase.thirdparty.com.google.protobuf.ByteString' import.</td>
 <td>78</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 'com.fasterxml.jackson.annotation.JsonInclude' import.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'type' must be private and have accessor methods.</td>
 <td>136</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'value' must be private and have accessor methods.</td>
 <td>137</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'op' must be private and have accessor methods.</td>
 <td>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'type' must be private and have accessor methods.</td>
 <td>208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'op' must be private and have accessor methods.</td>
 <td>209</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'value' must be private and have accessor methods.</td>
 <td>211</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'filters' must be private and have accessor methods.</td>
 <td>212</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'limit' must be private and have accessor methods.</td>
 <td>213</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'offset' must be private and have accessor methods.</td>
 <td>214</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'family' must be private and have accessor methods.</td>
 <td>215</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'qualifier' must be private and have accessor methods.</td>
 <td>216</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'ifMissing' must be private and have accessor methods.</td>
 <td>217</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'latestVersion' must be private and have accessor methods.</td>
 <td>218</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'minColumn' must be private and have accessor methods.</td>
 <td>219</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'minColumnInclusive' must be private and have accessor methods.</td>
 <td>220</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'maxColumn' must be private and have accessor methods.</td>
 <td>221</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'maxColumnInclusive' must be private and have accessor methods.</td>
 <td>222</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'dropDependentColumn' must be private and have accessor methods.</td>
 <td>223</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'chance' must be private and have accessor methods.</td>
 <td>224</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'prefixes' must be private and have accessor methods.</td>
 <td>225</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'timestamps' must be private and have accessor methods.</td>
 <td>227</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>354</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>375</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>376</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>377</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>378</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>379</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>380</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>381</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>382</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>383</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>384</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>385</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>388</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>389</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>390</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>393</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>394</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>395</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>396</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>397</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>398</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 8, expected level should be 10.</td>
 <td>399</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>400</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>401</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>402</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>403</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>404</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>405</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>406</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>407</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>408</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>409</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>410</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>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>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>412</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>413</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>414</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 8, expected level should be 10.</td>
 <td>415</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>416</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>417</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>418</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>419</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>420</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>421</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block rcurly' has incorrect indentation level 6, expected level should be 8.</td>
 <td>422</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>423</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>424</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>425</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>426</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>427</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>428</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>429</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>430</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>431</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>432</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>433</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>434</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>435</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>436</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>437</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>438</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>439</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' has incorrect indentation level 8, expected level should be 10.</td>
 <td>442</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>443</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 rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>444</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 10.</td>
 <td>445</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>446</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>447</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>448</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>449</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>450</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 10.</td>
 <td>453</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>454</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>455</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' has incorrect indentation level 8, expected level should be 10.</td>
 <td>456</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>457</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 rcurly' has incorrect indentation level 8, expected level should be 10.</td>
 <td>458</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>459</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>460</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>461</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>462</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>463</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>464</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>465</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>466</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>467</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>468</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>469</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>470</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>471</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>472</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>473</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>492</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>503</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>514</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>579</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>602</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>604</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>777</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -61985,19 +61967,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.StorageClusterStatusModel.java">org/apache/hadoop/hbase/rest/model/StorageClusterStatusModel.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.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations' import.</td>
 <td>39</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>
@@ -62006,25 +61988,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.TableInfoModel.java">org/apache/hadoop/hbase/rest/model/TableInfoModel.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.rest.ProtobufMessageHandler' import.</td>
 <td>32</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hbase.thirdparty.com.google.protobuf.UnsafeByteOperations' import.</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -62033,13 +62015,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.TableListModel.java">org/apache/hadoop/hbase/rest/model/TableListModel.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>
@@ -62048,13 +62030,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.TableModel.java">org/apache/hadoop/hbase/rest/model/TableModel.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -62063,13 +62045,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.TableRegionModel.java">org/apache/hadoop/hbase/rest/model/TableRegionModel.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>misc</td>
 <td>ArrayTypeStyle</td>
@@ -62078,19 +62060,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.TestScannerModel.java">org/apache/hadoop/hbase/rest/model/TestScannerModel.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 117).</td>
 <td>58</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>
@@ -62099,13 +62081,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.model.VersionModel.java">org/apache/hadoop/hbase/rest/model/VersionModel.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>
@@ -62114,13 +62096,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.provider.JAXBContextResolver.java">org/apache/hadoop/hbase/rest/provider/JAXBContextResolver.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>
@@ -62129,13 +62111,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.provider.consumer.ProtobufMessageBodyConsumer.java">org/apache/hadoop/hbase/rest/provider/consumer/ProtobufMessageBodyConsumer.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>
@@ -62144,13 +62126,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rest.provider.producer.PlainTextMessageBodyProducer.java">org/apache/hadoop/hbase/rest/provider/producer/PlainTextMessageBodyProducer.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>
@@ -62159,13 +62141,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rsgroup.RSGroupInfoManager.java">org/apache/hadoop/hbase/rsgroup/RSGroupInfoManager.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>
@@ -62174,13 +62156,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rsgroup.TestRSGroupMajorCompactionTTL.java">org/apache/hadoop/hbase/rsgroup/TestRSGroupMajorCompactionTTL.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -62189,19 +62171,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.rsgroup.VerifyingRSGroupAdmin.java">org/apache/hadoop/hbase/rsgroup/VerifyingRSGroupAdmin.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.LogEntry' import.</td>
 <td>53</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>
@@ -62210,19 +62192,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.AbstractHBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/AbstractHBaseSaslRpcClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>56</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>
@@ -62231,13 +62213,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.AccessDeniedException.java">org/apache/hadoop/hbase/security/AccessDeniedException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -62246,19 +62228,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.AuthMethod.java">org/apache/hadoop/hbase/security/AuthMethod.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.security.UserGroupInformation' import.</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -62267,19 +62249,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.CryptoAESUnwrapHandler.java">org/apache/hadoop/hbase/security/CryptoAESUnwrapHandler.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>25</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>
@@ -62288,19 +62270,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.CryptoAESWrapHandler.java">org/apache/hadoop/hbase/security/CryptoAESWrapHandler.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>30</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>
@@ -62309,58 +62291,58 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.EncryptionUtil.java">org/apache/hadoop/hbase/security/EncryptionUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.ColumnFamilyDescriptor' import.</td>
 <td>37</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.io.crypto.aes.CryptoAES' import.</td>
 <td>43</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>69</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>123</td></tr>
+<td>69</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>123</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>124</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.HBasePolicyProvider.java">org/apache/hadoop/hbase/security/HBasePolicyProvider.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.conf.Configuration' 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>imports</td>
 <td>ImportOrder</td>
@@ -62369,37 +62351,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.HBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/HBaseSaslRpcClient.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.io.WritableUtils' import.</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>93</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>202</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>229</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>
@@ -62408,13 +62390,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.HadoopSecurityEnabledUserProviderForTesting.java">org/apache/hadoop/hbase/security/HadoopSecurityEnabledUserProviderForTesting.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>RedundantImport</td>
@@ -62423,19 +62405,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.NettyHBaseRpcConnectionHeaderHandler.java">org/apache/hadoop/hbase/security/NettyHBaseRpcConnectionHeaderHandler.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>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -62444,13 +62426,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.NettyHBaseSaslRpcClient.java">org/apache/hadoop/hbase/security/NettyHBaseSaslRpcClient.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>
@@ -62459,19 +62441,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.NettyHBaseSaslRpcClientHandler.java">org/apache/hadoop/hbase/security/NettyHBaseSaslRpcClientHandler.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.IOException' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -62480,19 +62462,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.SaslChallengeDecoder.java">org/apache/hadoop/hbase/security/SaslChallengeDecoder.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 'java.io.IOException' import.</td>
 <td>24</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>
@@ -62501,19 +62483,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.SaslStatus.java">org/apache/hadoop/hbase/security/SaslStatus.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
 <td>'(' is preceded with whitespace.</td>
 <td>26</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>
@@ -62522,13 +62504,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.SaslUnwrapHandler.java">org/apache/hadoop/hbase/security/SaslUnwrapHandler.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>
@@ -62537,13 +62519,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.SaslUtil.java">org/apache/hadoop/hbase/security/SaslUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -62552,13 +62534,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.SecurityUtil.java">org/apache/hadoop/hbase/security/SecurityUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -62567,13 +62549,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.Superusers.java">org/apache/hadoop/hbase/security/Superusers.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -62582,37 +62564,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.TestSecureIPC.java">org/apache/hadoop/hbase/security/TestSecureIPC.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>190</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>220</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>231</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>276</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -62621,13 +62603,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.TestUser.java">org/apache/hadoop/hbase/security/TestUser.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>
@@ -62636,13 +62618,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.TestUsersOperationsWithSecureHadoop.java">org/apache/hadoop/hbase/security/TestUsersOperationsWithSecureHadoop.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>
@@ -62651,43 +62633,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.User.java">org/apache/hadoop/hbase/security/User.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>182</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>184</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>'class def modifier' has incorrect indentation level 3, expected level should be 2.</td>
 <td>295</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>317</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>371</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>
@@ -62696,316 +62678,316 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.AccessControlClient.java">org/apache/hadoop/hbase/security/access/AccessControlClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>45</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>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>84</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>85</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>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>91</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 118).</td>
 <td>103</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>105</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>106</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>107</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>108</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>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>110</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>120</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>121</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>125</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>126</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 111).</td>
 <td>137</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>140</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>141</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>142</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>143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>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>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>153</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>157</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>158</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>169</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>171</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>172</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>173</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>174</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>191</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>192</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>193</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>194</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>195</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>196</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>209</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>210</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>211</td></tr>
+<td>210</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>211</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>236</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.AccessControlFilter.java">org/apache/hadoop/hbase/security/access/AccessControlFilter.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.Cell' import.</td>
 <td>26</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>168</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>
@@ -63014,212 +62996,212 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.AccessControlUtil.java">org/apache/hadoop/hbase/security/access/AccessControlUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class AccessControlUtil should be declared as final.</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</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>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>393</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>394</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>395</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>396</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>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>'case' child has incorrect indentation level 4, expected level should be 6.</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>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>399</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>400</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>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>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>415</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>416</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>417</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>418</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>419</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>420</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>421</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>422</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>423</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>424</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>495</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>500</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>507</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>524</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>552</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>564</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>673</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>704</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>723</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>764</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>780</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>820</td></tr>
+<td>780</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>820</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 4, expected level should be 6.</td>
@@ -63227,133 +63209,133 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.AccessController.java">org/apache/hadoop/hbase/security/access/AccessController.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>'catch' child has incorrect indentation level 10, expected level should be 6.</td>
 <td>298</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>310</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>451</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 166 lines (max allowed is 150).</td>
 <td>453</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>566</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>810</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>1045</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1142</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1315</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1316</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1317</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1318</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1319</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1320</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1321</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1322</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1323</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1943</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1947</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>1957</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>
@@ -63362,31 +63344,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.AuthResult.java">org/apache/hadoop/hbase/security/access/AuthResult.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.Cell' import.</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 29 should have line break after.</td>
 <td>132</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>296</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>
@@ -63395,19 +63377,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.Permission.java">org/apache/hadoop/hbase/security/access/Permission.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>35</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>
@@ -63416,25 +63398,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.SecureTestUtil.java">org/apache/hadoop/hbase/security/access/SecureTestUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -63443,85 +63425,85 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.ShadedAccessControlUtil.java">org/apache/hadoop/hbase/security/access/ShadedAccessControlUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>49</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>77</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>85</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>151</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -63530,13 +63512,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.SnapshotScannerHDFSAclCleaner.java">org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclCleaner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -63545,13 +63527,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TablePermission.java">org/apache/hadoop/hbase/security/access/TablePermission.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>
@@ -63560,13 +63542,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestAccessControlFilter.java">org/apache/hadoop/hbase/security/access/TestAccessControlFilter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>MethodParamPad</td>
@@ -63575,73 +63557,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestAccessController.java">org/apache/hadoop/hbase/security/access/TestAccessController.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>'implements' has incorrect indentation level 2, expected level should be 4.</td>
 <td>517</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 7, expected level should be one of the following: 8, 10.</td>
 <td>582</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 7, expected level should be one of the following: 8, 10.</td>
 <td>604</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>888</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>
 <td>Method length is 243 lines (max allowed is 150).</td>
 <td>1302</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1460</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1552</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 167 lines (max allowed is 150).</td>
 <td>1772</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>2251</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 112).</td>
 <td>2477</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>
@@ -63650,26 +63632,26 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestAccessController2.java">org/apache/hadoop/hbase/security/access/TestAccessController2.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>EmptyBlock</td>
-<td>Must have at least one statement.</td>
-<td>302</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
-<td>328</td></tr>
+<td>302</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>EmptyBlock</td>
+<td>Must have at least one statement.</td>
+<td>328</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>
@@ -63677,13 +63659,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestCellACLWithMultipleVersions.java">org/apache/hadoop/hbase/security/access/TestCellACLWithMultipleVersions.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>
@@ -63692,13 +63674,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestCellACLs.java">org/apache/hadoop/hbase/security/access/TestCellACLs.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -63707,31 +63689,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestHDFSAclHelper.java">org/apache/hadoop/hbase/security/access/TestHDFSAclHelper.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.client.*.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>31</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.junit.Assert.assertEquals' import.</td>
 <td>37</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -63740,19 +63722,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestTablePermissions.java">org/apache/hadoop/hbase/security/access/TestTablePermissions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>133</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>
@@ -63761,19 +63743,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.TestWithDisabledAuthorization.java">org/apache/hadoop/hbase/security/access/TestWithDisabledAuthorization.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 165 lines (max allowed is 150).</td>
 <td>242</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -63782,64 +63764,64 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.access.ZKPermissionWatcher.java">org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.Closeable' import.</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>236</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>263</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>264</td></tr>
+<td>263</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>264</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>283</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.provider.example.TestShadeSaslAuthenticationProvider.java">org/apache/hadoop/hbase/security/provider/example/TestShadeSaslAuthenticationProvider.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 103).</td>
 <td>90</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>
@@ -63848,19 +63830,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.AuthenticationKey.java">org/apache/hadoop/hbase/security/token/AuthenticationKey.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.DataInput' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -63869,31 +63851,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.AuthenticationTokenSecretManager.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenSecretManager.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 'java.io.IOException' 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>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>84</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>
@@ -63902,13 +63884,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.AuthenticationTokenSelector.java">org/apache/hadoop/hbase/security/token/AuthenticationTokenSelector.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>
@@ -63917,13 +63899,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.SecureTestCluster.java">org/apache/hadoop/hbase/security/token/SecureTestCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -63932,31 +63914,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.TestTokenAuthentication.java">org/apache/hadoop/hbase/security/token/TestTokenAuthentication.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>'lambda arguments' has incorrect indentation level 10, expected level should be 8.</td>
 <td>267</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>441</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>442</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>
@@ -63965,52 +63947,52 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.TestZKSecretWatcher.java">org/apache/hadoop/hbase/security/token/TestZKSecretWatcher.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>'extends' has incorrect indentation level 2, expected level should be 4.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 152 lines (max allowed is 150).</td>
 <td>139</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>189</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>190</td></tr>
+<td>189</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>190</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>191</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.TokenProvider.java">org/apache/hadoop/hbase/security/token/TokenProvider.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>
@@ -64019,13 +64001,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.TokenUtil.java">org/apache/hadoop/hbase/security/token/TokenUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -64034,19 +64016,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.token.ZKSecretWatcher.java">org/apache/hadoop/hbase/security/token/ZKSecretWatcher.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 'java.io.IOException' import.</td>
 <td>24</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>
@@ -64055,25 +64037,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.CellVisibility.java">org/apache/hadoop/hbase/security/visibility/CellVisibility.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -64082,55 +64064,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.DefaultVisibilityLabelServiceImpl.java">org/apache/hadoop/hbase/security/visibility/DefaultVisibilityLabelServiceImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>343</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>344</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>386</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>423</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>621</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>633</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>648</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -64139,13 +64121,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.DefinedSetFilterScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/DefinedSetFilterScanLabelGenerator.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>
@@ -64154,13 +64136,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.EnforcingScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/EnforcingScanLabelGenerator.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>
@@ -64169,13 +64151,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ExpAsStringVisibilityLabelServiceImpl.java">org/apache/hadoop/hbase/security/visibility/ExpAsStringVisibilityLabelServiceImpl.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>
@@ -64184,13 +64166,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ExpressionExpander.java">org/apache/hadoop/hbase/security/visibility/ExpressionExpander.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>
@@ -64199,73 +64181,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ExpressionParser.java">org/apache/hadoop/hbase/security/visibility/ExpressionParser.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.security.visibility.expression.ExpressionNode' import.</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>303</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>304</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>305</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>306</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>307</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>308</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>309</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>
@@ -64274,13 +64256,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.FeedUserAuthScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/FeedUserAuthScanLabelGenerator.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>
@@ -64289,25 +64271,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.LabelFilteringScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/LabelFilteringScanLabelGenerator.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>24</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>46</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -64316,13 +64298,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.LoadTestDataGeneratorWithVisibilityLabels.java">org/apache/hadoop/hbase/security/visibility/LoadTestDataGeneratorWithVisibilityLabels.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>
@@ -64331,25 +64313,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/ScanLabelGenerator.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.Configurable' 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>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>36</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -64358,13 +64340,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.SimpleScanLabelGenerator.java">org/apache/hadoop/hbase/security/visibility/SimpleScanLabelGenerator.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>
@@ -64373,13 +64355,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestExpressionExpander.java">org/apache/hadoop/hbase/security/visibility/TestExpressionExpander.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -64388,19 +64370,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestExpressionParser.java">org/apache/hadoop/hbase/security/visibility/TestExpressionParser.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 253 lines (max allowed is 150).</td>
 <td>44</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>
@@ -64409,32 +64391,32 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabels.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabels.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>268</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 101).</td>
-<td>381</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>409</td></tr>
+<td>381</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>sizes</td>
+<td>LineLength</td>
+<td>Line is longer than 100 characters (found 101).</td>
+<td>409</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be one of the following: 10, 28.</td>
@@ -64442,13 +64424,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsOpWithDifferentUsersNoACL.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsOpWithDifferentUsersNoACL.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>
@@ -64457,52 +64439,52 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsReplication.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsReplication.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>121</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>124</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>125</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>127</td></tr>
+<td>125</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
+<td>127</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'array initialization' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>128</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithACL.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithACL.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>
@@ -64511,13 +64493,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithCustomVisLabService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithCustomVisLabService.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>
@@ -64526,13 +64508,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDefaultVisLabelService.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDefaultVisLabelService.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>
@@ -64541,13 +64523,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLabelsWithDeletes.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLabelsWithDeletes.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -64556,13 +64538,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.TestVisibilityLablesWithGroups.java">org/apache/hadoop/hbase/security/visibility/TestVisibilityLablesWithGroups.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -64571,142 +64553,142 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityClient.java">org/apache/hadoop/hbase/security/visibility/VisibilityClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>71</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>73</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>83</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>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>86</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>125</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>126</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>127</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>129</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>140</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>176</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>213</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>214</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>215</td></tr>
+<td>214</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>215</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>217</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityConstants.java">org/apache/hadoop/hbase/security/visibility/VisibilityConstants.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -64715,43 +64697,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityController.java">org/apache/hadoop/hbase/security/visibility/VisibilityController.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>241</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>481</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>482</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>609</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>750</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>
@@ -64760,13 +64742,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityExpEvaluator.java">org/apache/hadoop/hbase/security/visibility/VisibilityExpEvaluator.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>
@@ -64775,13 +64757,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityLabelFilter.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelFilter.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>
@@ -64790,19 +64772,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityLabelService.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelService.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.coprocessor.RegionCoprocessorEnvironment' import.</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -64811,25 +64793,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityLabelServiceManager.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelServiceManager.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.conf.Configuration' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class VisibilityLabelServiceManager should be declared as final.</td>
 <td>31</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>
@@ -64838,52 +64820,52 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityLabelsCache.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelsCache.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class VisibilityLabelsCache should be declared as final.</td>
 <td>48</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>79</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>80</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>82</td></tr>
+<td>80</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>82</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>259</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityLabelsValidator.java">org/apache/hadoop/hbase/security/visibility/VisibilityLabelsValidator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -64892,97 +64874,97 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityNewVersionBehaivorTracker.java">org/apache/hadoop/hbase/security/visibility/VisibilityNewVersionBehaivorTracker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class TagInfo should be declared as final.</td>
 <td>56</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>126</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>127</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>130</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>131</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>132</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>133</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>136</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>137</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>140</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>141</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>142</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>144</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>
@@ -64991,13 +64973,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityReplicationEndpoint.java">org/apache/hadoop/hbase/security/visibility/VisibilityReplicationEndpoint.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -65006,43 +64988,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityScanDeleteTracker.java">org/apache/hadoop/hbase/security/visibility/VisibilityScanDeleteTracker.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.regionserver.querymatcher.ScanDeleteTracker' import.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.Cell' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>127</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 115).</td>
 <td>130</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 120).</td>
 <td>140</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>
@@ -65051,13 +65033,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityTestUtil.java">org/apache/hadoop/hbase/security/visibility/VisibilityTestUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -65066,61 +65048,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.VisibilityUtils.java">org/apache/hadoop/hbase/security/visibility/VisibilityUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>106</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>126</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>128</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>147</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>149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>231</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>
@@ -65129,19 +65111,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.security.visibility.ZKVisibilityLabelWatcher.java">org/apache/hadoop/hbase/security/visibility/ZKVisibilityLabelWatcher.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>25</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>
@@ -65150,1475 +65132,1475 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/shaded/protobuf/ProtobufUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>304</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>350</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>420</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>519</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>544</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>545</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>546</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>547</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>548</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>549</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>550</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>551</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>552</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>553</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>554</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>555</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</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>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>566</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>567</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>568</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>569</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>570</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>571</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>572</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>573</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>574</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>575</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>576</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>585</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>588</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>666</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>669</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>679</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>682</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>711</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>781</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>784</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>794</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>797</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 117).</td>
 <td>862</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>880</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>922</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>925</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>945</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>951</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>965</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>1012</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>1115</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>1243</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1314</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>1315</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>1317</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1331</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>1368</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>1369</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>1370</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>1372</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>1382</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>1383</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>1385</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1388</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>1412</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>1413</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1483</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1485</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>1525</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1528</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1548</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1554</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1588</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>1645</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>1647</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1652</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1653</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1654</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1655</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1656</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1657</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1658</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1659</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1660</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>1670</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1675</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1676</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1677</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1678</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1679</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1680</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1681</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1682</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>1683</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>1684</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1697</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>1763</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>1764</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>1765</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>1783</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 130).</td>
 <td>1788</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>1802</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>1803</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>1804</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 124).</td>
 <td>1807</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>1822</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>1824</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 124).</td>
 <td>1826</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 112).</td>
 <td>1836</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1838</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 117).</td>
 <td>1855</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1856</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>1857</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1870</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1888</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1900</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>2102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>2127</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>2175</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2179</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>2220</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>2329</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2333</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>2340</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>2342</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2345</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>2360</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>2372</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2376</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2383</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2385</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2388</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>2403</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>2417</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>2436</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>2455</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2486</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2517</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>2531</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>2545</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>2559</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>2690</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>2713</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>2728</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>2743</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>2757</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>2771</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>2772</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>2773</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>2904</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 112).</td>
 <td>2950</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>2970</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>2982</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>2994</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>3010</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>3057</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>3070</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 3, expected level should be 2.</td>
 <td>3087</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>3089</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>3090</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>3092</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>3093</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>3094</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 3, expected level should be 2.</td>
 <td>3095</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>3179</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>3180</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>3181</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>3183</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>3184</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3187</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>3241</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>3256</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 108).</td>
 <td>3281</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>'.' has incorrect indentation level 4, expected level should be 6.</td>
 <td>3305</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>'.' has incorrect indentation level 4, expected level should be 6.</td>
 <td>3306</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'.' has incorrect indentation level 4, expected level should be 6.</td>
-<td>3307</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'.' has incorrect indentation level 4, expected level should be 6.</td>
-<td>3308</td></tr>
+<td>3307</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'.' has incorrect indentation level 4, expected level should be 6.</td>
+<td>3308</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'.' has incorrect indentation level 4, expected level should be 6.</td>
 <td>3309</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.shaded.protobuf.RequestConverter.java">org/apache/hadoop/hbase/shaded/protobuf/RequestConverter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>202</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>218</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>252</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>253</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>255</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>270</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>271</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>273</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>292</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>293</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>313</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>314</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>316</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>333</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>334</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>336</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>340</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>374</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>375</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>376</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>377</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>379</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>400</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>401</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>402</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>419</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>420</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>421</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>422</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>445</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>446</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>447</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>448</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>449</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>450</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>470</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>520</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>'org' has incorrect indentation level 9, expected level should be 10.</td>
 <td>561</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>889</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>964</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>988</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>989</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>1008</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>1009</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>1028</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>1029</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>1047</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>1048</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>1094</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>1106</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>1119</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>1131</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>1168</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>1185</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>1202</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>1203</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>1226</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>1227</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>1246</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>1360</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>1361</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>1479</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>1535</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>1647</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>1659</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>1671</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>1682</td></tr>
+<td>1671</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>1682</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>
@@ -66626,145 +66608,145 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.shaded.protobuf.ResponseConverter.java">org/apache/hadoop/hbase/shaded/protobuf/ResponseConverter.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>97</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>113</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>241</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>246</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>253</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>258</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>263</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>293</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 lparen' has incorrect indentation level 6, expected level should be 2.</td>
 <td>304</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>'(' should be on the previous line.</td>
 <td>304</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>305</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>312</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>313</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>331</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>401</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>418</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>419</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>424</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>443</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 129).</td>
 <td>496</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>497</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>
@@ -66773,19 +66755,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.slowlog.SlowLogTableAccessor.java">org/apache/hadoop/hbase/slowlog/SlowLogTableAccessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -66794,247 +66776,247 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.CreateSnapshot.java">org/apache/hadoop/hbase/snapshot/CreateSnapshot.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>40</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>'member def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>41</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>'member def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>45</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 4, expected level should be 2.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>50</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>51</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>52</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 4, expected level should be 2.</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>57</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>59</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>60</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>61</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 4.</td>
 <td>62</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 6.</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 6.</td>
 <td>64</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 rcurly' has incorrect indentation level 8, expected level should be 4.</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 4, expected level should be 2.</td>
 <td>66</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>68</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>71</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' has incorrect indentation level 8, expected level should be 4.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>73</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>75</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 8, expected level should be 4.</td>
 <td>76</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>77</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch' child has incorrect indentation level 12, expected level should be 6.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'catch rcurly' has incorrect indentation level 8, expected level should be 4.</td>
 <td>79</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 12, expected level should be 6.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 16, expected level should be 8.</td>
 <td>81</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 12, expected level should be 6.</td>
 <td>82</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 12, expected level should be 6.</td>
 <td>83</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 16, expected level should be 8.</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 12, expected level should be 6.</td>
 <td>85</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'finally rcurly' has incorrect indentation level 8, expected level should be 4.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -67043,91 +67025,91 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.ExportSnapshot.java">org/apache/hadoop/hbase/snapshot/ExportSnapshot.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>279</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>280</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>545</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>548</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>552</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>555</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>603</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 44 should have line break after.</td>
 <td>773</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 45 should have line break after.</td>
 <td>776</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 34 should have line break after.</td>
 <td>779</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>807</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>808</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>
 <td>Method length is 171 lines (max allowed is 150).</td>
 <td>942</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>
@@ -67136,44 +67118,44 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.MobSnapshotTestingUtils.java">org/apache/hadoop/hbase/snapshot/MobSnapshotTestingUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>89</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>90</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>91</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>93</td></tr>
+<td>91</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>93</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>
@@ -67181,154 +67163,154 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.RestoreSnapshotHelper.java">org/apache/hadoop/hbase/snapshot/RestoreSnapshotHelper.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>378</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>419</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>434</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>449</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>586</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>642</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>667</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>733</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>827</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>828</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>829</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>830</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>831</td></tr>
+<td>830</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>831</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>832</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils.java">org/apache/hadoop/hbase/snapshot/SnapshotDescriptionUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil.</td>
 <td>50</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>98</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>153</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>154</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>155</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>178</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>380</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -67337,73 +67319,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.SnapshotInfo.java">org/apache/hadoop/hbase/snapshot/SnapshotInfo.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>126</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>127</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>128</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 5 should be on the previous line.</td>
 <td>153</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 40 should have line break after.</td>
 <td>192</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 40 should have line break after.</td>
 <td>230</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>327</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>399</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>462</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>472</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>
@@ -67412,43 +67394,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.SnapshotManifest.java">org/apache/hadoop/hbase/snapshot/SnapshotManifest.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>187</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>356</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>440</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>484</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -67457,13 +67439,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.SnapshotManifestV2.java">org/apache/hadoop/hbase/snapshot/SnapshotManifestV2.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>
@@ -67472,163 +67454,163 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.SnapshotTestingUtils.java">org/apache/hadoop/hbase/snapshot/SnapshotTestingUtils.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>210</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>212</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 modifier' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>222</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>225</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>226</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>227</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 152).</td>
 <td>232</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 158).</td>
 <td>239</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>268</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>422</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>425</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>426</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>427</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' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>428</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>429</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>430</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>431</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>432</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
 <td>433</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>564</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 14, expected level should be 12.</td>
 <td>578</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>596</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>636</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>646</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>803</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>
@@ -67637,13 +67619,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.TestExportSnapshot.java">org/apache/hadoop/hbase/snapshot/TestExportSnapshot.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -67652,13 +67634,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.TestFlushSnapshotFromClient.java">org/apache/hadoop/hbase/snapshot/TestFlushSnapshotFromClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -67667,19 +67649,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.snapshot.TestRestoreSnapshotHelper.java">org/apache/hadoop/hbase/snapshot/TestRestoreSnapshotHelper.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>210</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>
@@ -67688,205 +67670,205 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.test.IntegrationTestBigLinkedList.java">org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.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 102).</td>
 <td>318</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>478</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>658</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>673</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 50 should have line break after.</td>
 <td>690</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>717</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>721</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>724</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>934</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1019</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>1021</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 4, expected level should be 6.</td>
 <td>1039</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1053</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 111).</td>
 <td>1160</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 6, expected level should be 8.</td>
 <td>1161</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>1177</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>1178</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1180</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>1194</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>1204</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>1296</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 6, expected level should be 8.</td>
 <td>1300</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1302</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1325</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1328</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>1470</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>1479</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1539</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1654</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1662</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>1664</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>1724</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>
@@ -67895,43 +67877,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.test.IntegrationTestBigLinkedListWithVisibility.java">org/apache/hadoop/hbase/test/IntegrationTestBigLinkedListWithVisibility.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 110).</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>343</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 111).</td>
 <td>499</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>535</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>
@@ -67940,60 +67922,54 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.test.IntegrationTestLoadAndVerify.java">org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.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>'method def modifier' has incorrect indentation level 0, expected level should be 2.</td>
 <td>157</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 2, expected level should be 4.</td>
 <td>159</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' has incorrect indentation level 2, expected level should be 4.</td>
 <td>160</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>161</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 rcurly' has incorrect indentation level 2, expected level should be 4.</td>
 <td>162</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 0, expected level should be 2.</td>
 <td>163</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>172</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>whitespace</td>
-<td>ParenPad</td>
-<td>'(' is followed by whitespace.</td>
-<td>174</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
@@ -68010,7 +67986,7 @@
 <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>'(' is followed by whitespace.</td>
 <td>174</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -68028,8 +68004,8 @@
 <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>175</td></tr>
+<td>')' is preceded with whitespace.</td>
+<td>174</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
@@ -68046,7 +68022,7 @@
 <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>'(' is followed by whitespace.</td>
 <td>175</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -68064,8 +68040,8 @@
 <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>176</td></tr>
+<td>')' is preceded with whitespace.</td>
+<td>175</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
@@ -68082,7 +68058,7 @@
 <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>'(' is followed by whitespace.</td>
 <td>176</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -68100,8 +68076,8 @@
 <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>177</td></tr>
+<td>')' is preceded with whitespace.</td>
+<td>176</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
@@ -68118,7 +68094,7 @@
 <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>'(' is followed by whitespace.</td>
 <td>177</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -68136,8 +68112,8 @@
 <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>178</td></tr>
+<td>')' is preceded with whitespace.</td>
+<td>177</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
@@ -68154,7 +68130,7 @@
 <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>'(' is followed by whitespace.</td>
 <td>178</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -68172,8 +68148,8 @@
 <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>179</td></tr>
+<td>')' is preceded with whitespace.</td>
+<td>178</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
@@ -68190,7 +68166,7 @@
 <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>'(' is followed by whitespace.</td>
 <td>179</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -68208,8 +68184,8 @@
 <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>180</td></tr>
+<td>')' is preceded with whitespace.</td>
+<td>179</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
@@ -68226,7 +68202,7 @@
 <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>'(' is followed by whitespace.</td>
 <td>180</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -68244,8 +68220,8 @@
 <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>181</td></tr>
+<td>')' is preceded with whitespace.</td>
+<td>180</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
@@ -68262,7 +68238,7 @@
 <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>'(' is followed by whitespace.</td>
 <td>181</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
@@ -68278,95 +68254,101 @@
 <td>181</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>181</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 3 should be on the previous line.</td>
 <td>186</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>280</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>471</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>488</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>507</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>509</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>517</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>558</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>559</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>560</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>561</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 115).</td>
 <td>562</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>563</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>564</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>565</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -68375,58 +68357,58 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.test.IntegrationTestReplication.java">org/apache/hadoop/hbase/test/IntegrationTestReplication.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.HConstants' import.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Admin' import.</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.Collections' import.</td>
 <td>43</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>181</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>262</td></tr>
+<td>181</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>262</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>286</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.test.IntegrationTestTimeBoundedMultiGetRequestsWithRegionReplicas.java">org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedMultiGetRequestsWithRegionReplicas.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -68435,37 +68417,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.test.IntegrationTestTimeBoundedRequestsWithRegionReplicas.java">org/apache/hadoop/hbase/test/IntegrationTestTimeBoundedRequestsWithRegionReplicas.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 102).</td>
 <td>164</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>226</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>342</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>344</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>
@@ -68474,91 +68456,91 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.test.IntegrationTestWithCellVisibilityLoadAndVerify.java">org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 52.</td>
 <td>93</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 6, expected level should be one of the following: 4, 52.</td>
 <td>94</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be one of the following: 8, 69.</td>
 <td>143</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>192</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>193</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>194</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>195</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>196</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>197</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>198</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>199</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>200</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>201</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -68567,13 +68549,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.thrift.IncrementCoalescer.java">org/apache/hadoop/hbase/thrift/IncrementCoalescer.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>
@@ -68582,19 +68564,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.thrift.TestBindExceptionHandling.java">org/apache/hadoop/hbase/thrift/TestBindExceptionHandling.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.IOException' import.</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -68603,13 +68585,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.thrift.TestThriftHttpServer.java">org/apache/hadoop/hbase/thrift/TestThriftHttpServer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -68618,13 +68600,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.thrift.ThriftServerRunner.java">org/apache/hadoop/hbase/thrift/ThriftServerRunner.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>
@@ -68633,13 +68615,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.thrift2.ThriftHBaseServiceHandler.java">org/apache/hadoop/hbase/thrift2/ThriftHBaseServiceHandler.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>
@@ -68648,13 +68630,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.thrift2.client.ThriftAdmin.java">org/apache/hadoop/hbase/thrift2/client/ThriftAdmin.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>
@@ -68663,13 +68645,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.tool.Canary.java">org/apache/hadoop/hbase/tool/Canary.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>
@@ -68678,13 +68660,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.tool.HFileContentValidator.java">org/apache/hadoop/hbase/tool/HFileContentValidator.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>
@@ -68693,13 +68675,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.tool.MapreduceTestingShim.java">org/apache/hadoop/hbase/tool/MapreduceTestingShim.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>
@@ -68708,43 +68690,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.tool.TestBulkLoadHFilesSplitRecovery.java">org/apache/hadoop/hbase/tool/TestBulkLoadHFilesSplitRecovery.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>160</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>161</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>162</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>242</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>250</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -68753,49 +68735,49 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.trace.IntegrationTestSendTraceRequests.java">org/apache/hadoop/hbase/trace/IntegrationTestSendTraceRequests.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.TableName' import.</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.io.IOException' import.</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' has incorrect indentation level 6, expected level should be 4.</td>
 <td>118</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>148</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>153</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -68804,61 +68786,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.trace.TraceTree.java">org/apache/hadoop/hbase/trace/TraceTree.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.Collection' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 12, expected level should be one of the following: 8, 10.</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>43</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 8, expected level should be one of the following: 4, 6.</td>
 <td>44</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 modifier' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 12, expected level should be one of the following: 8, 10.</td>
 <td>93</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 10, expected level should be one of the following: 6, 8.</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -68867,25 +68849,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.AbstractFileStatusFilter.java">org/apache/hadoop/hbase/util/AbstractFileStatusFilter.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.fs.FileStatus' 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 'edu.umd.cs.findbugs.annotations.CheckForNull' 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>sizes</td>
 <td>LineLength</td>
@@ -68894,13 +68876,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.AbstractHBaseTool.java">org/apache/hadoop/hbase/util/AbstractHBaseTool.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>misc</td>
 <td>ArrayTypeStyle</td>
@@ -68909,37 +68891,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.Addressing.java">org/apache/hadoop/hbase/util/Addressing.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>54</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -68948,184 +68930,184 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.AvlUtil.java">org/apache/hadoop/hbase/util/AvlUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>158</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>206</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>234</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>238</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>242</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>262</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>431</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>520</td></tr>
+<td>431</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>520</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>521</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.BaseTestHBaseFsck.java">org/apache/hadoop/hbase/util/BaseTestHBaseFsck.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>223</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>224</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>225</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>236</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>262</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>290</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>355</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>356</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>358</td></tr>
+<td>356</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>358</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>384</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.BloomContext.java">org/apache/hadoop/hbase/util/BloomContext.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.io.hfile.HFile' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>48</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>49</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>70</td></tr>
+<td>49</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>70</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>71</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.BloomFilter.java">org/apache/hadoop/hbase/util/BloomFilter.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>
@@ -69134,19 +69116,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.BloomFilterChunk.java">org/apache/hadoop/hbase/util/BloomFilterChunk.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.regionserver.BloomType' 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>
@@ -69155,149 +69137,149 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.BloomFilterFactory.java">org/apache/hadoop/hbase/util/BloomFilterFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>115</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>158</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>159</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>160</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>205</td></tr>
+<td>160</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>205</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>206</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.BloomFilterUtil.java">org/apache/hadoop/hbase/util/BloomFilterUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>75</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>76</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>105</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>106</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>120</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>121</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>122</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>140</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>141</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>142</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>155</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>156</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>190</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>191</td></tr>
+<td>190</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>191</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 3, expected level should be 2.</td>
@@ -69305,13 +69287,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.BloomFilterWriter.java">org/apache/hadoop/hbase/util/BloomFilterWriter.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>
@@ -69320,856 +69302,856 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.BoundedPriorityBlockingQueue.java">org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.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.concurrent.BlockingQueue' import.</td>
 <td>23</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.Collection' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'java.util.AbstractQueue' import.</td>
 <td>29</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>96</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>201</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>326</td></tr>
+<td>201</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>326</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>328</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ByteBufferUtils.java">org/apache/hadoop/hbase/util/ByteBufferUtils.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>'method def modifier' has incorrect indentation level 3, expected level should be 2.</td>
 <td>395</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 modifier' has incorrect indentation level 3, expected level should be 2.</td>
 <td>417</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' has incorrect indentation level 5, expected level should be 4.</td>
 <td>422</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 7, expected level should be 6.</td>
 <td>423</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 rcurly' has incorrect indentation level 5, expected level should be 4.</td>
 <td>424</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>'else' child has incorrect indentation level 7, expected level should be 6.</td>
 <td>425</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>'else rcurly' has incorrect indentation level 5, expected level should be 4.</td>
 <td>426</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 3, expected level should be 2.</td>
 <td>427</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>573</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>608</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>689</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>690</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>691</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>692</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>693</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>844</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>845</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>846</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>865</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>897</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>959</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>960</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>976</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>977</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1009</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>1010</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>1033</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>1043</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>1044</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>1097</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>1098</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>1099</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>1100</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>1119</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>1120</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>1121</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>1122</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>1140</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>1141</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>1142</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1144</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>1168</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>1178</td></tr>
+<td>1168</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>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>1180</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.Bytes.java">org/apache/hadoop/hbase/util/Bytes.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>205</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>206</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>252</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>371</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>402</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>420</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>584</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>601</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>626</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>627</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>654</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>775</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>'else' child has incorrect indentation level 5, expected level should be 6.</td>
 <td>793</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>806</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>936</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>952</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>974</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1023</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1052</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1072</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>1088</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>1103</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>1113</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>1114</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>1115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1567</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1568</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1569</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1570</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1575</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1599</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1612</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1613</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1614</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1641</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1642</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1652</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1653</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1662</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1672</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1779</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1792</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1793</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>1795</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1803</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>1816</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>1825</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1885</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1886</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1890</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>1892</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>1919</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1993</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1996</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>1999</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2028</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2031</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>2034</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>2049</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2066</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2093</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2118</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>2135</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>2147</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2160</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>2171</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>2172</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2175</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>2357</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>2358</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>2359</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>2380</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>2381</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>2382</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>2408</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>2409</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 5 should be on the previous line.</td>
 <td>2436</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>2469</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'for' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>2476</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>2482</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>2483</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>2504</td></tr>
+<td>2483</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>2504</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>2505</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ChecksumType.java">org/apache/hadoop/hbase/util/ChecksumType.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>89</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>
@@ -70178,91 +70160,91 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ClassSize.java">org/apache/hadoop/hbase/util/ClassSize.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>40</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>352</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>353</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>366</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>376</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>378</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>380</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>382</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>384</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>386</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>388</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>390</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>442</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>
@@ -70271,13 +70253,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.Classes.java">org/apache/hadoop/hbase/util/Classes.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -70286,13 +70268,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.CollectionBackedScanner.java">org/apache/hadoop/hbase/util/CollectionBackedScanner.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>
@@ -70301,31 +70283,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.CommonFSUtils.java">org/apache/hadoop/hbase/util/CommonFSUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.apache.hadoop.HadoopIllegalArgumentException.</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - org.apache.hadoop.ipc.RemoteException.</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>759</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>
@@ -70334,37 +70316,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.CompressionTest.java">org/apache/hadoop/hbase/util/CompressionTest.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>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.io.hfile.CacheConfig' import.</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>116</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>
@@ -70373,24 +70355,18 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ConcurrentMapUtils.java">org/apache/hadoop/hbase/util/ConcurrentMapUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>30</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>61</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
@@ -70402,29 +70378,35 @@
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
+<td>61</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>62</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ConfigurationUtil.java">org/apache/hadoop/hbase/util/ConfigurationUtil.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.conf.Configuration' import.</td>
 <td>22</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.util.StringUtils' import.</td>
 <td>24</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>
@@ -70433,31 +70415,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ConnectionCache.java">org/apache/hadoop/hbase/util/ConnectionCache.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Admin' 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 46 should have line break after.</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 44 should have line break after.</td>
 <td>75</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -70466,13 +70448,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ConstantDelayQueue.java">org/apache/hadoop/hbase/util/ConstantDelayQueue.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -70481,94 +70463,94 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.CoprocessorClassLoader.java">org/apache/hadoop/hbase/util/CoprocessorClassLoader.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class CoprocessorClassLoader should be declared as final.</td>
 <td>77</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 rcurly' has incorrect indentation level 2, expected level should be one of the following: 6, 8.</td>
 <td>126</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>169</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>238</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 modifier' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>264</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
 <td>266</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
 <td>267</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
 <td>268</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>372</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>395</td></tr>
+<td>372</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>395</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>396</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.DirectMemoryUtils.java">org/apache/hadoop/hbase/util/DirectMemoryUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -70577,82 +70559,82 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.EncryptionTest.java">org/apache/hadoop/hbase/util/EncryptionTest.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.conf.Configuration' import.</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class EncryptionTest should be declared as final.</td>
 <td>38</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>53</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>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>104</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>105</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>106</td></tr>
+<td>105</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>106</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>107</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.EnvironmentEdgeManager.java">org/apache/hadoop/hbase/util/EnvironmentEdgeManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -70661,19 +70643,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.FSRegionScanner.java">org/apache/hadoop/hbase/util/FSRegionScanner.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.fs.BlockLocation' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>RedundantImport</td>
@@ -70682,388 +70664,388 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.FSTableDescriptors.java">org/apache/hadoop/hbase/util/FSTableDescriptors.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>354</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>492</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>549</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>628</td></tr>
+<td>549</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>628</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>656</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.FSUtils.java">org/apache/hadoop/hbase/util/FSUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>136</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>170</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>236</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>262</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>264</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>270</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>274</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>285</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>286</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>289</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>311</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>352</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>369</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>387</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>405</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>444</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>459</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>499</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>561</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>603</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>604</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>608</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>612</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>693</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>695</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>764</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>799</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>928</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>953</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>954</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>955</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>956</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>957</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>1004</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>1006</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>1070</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>1072</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 112).</td>
 <td>1083</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>1184</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>'final' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1187</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1188</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1204</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>1271</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1293</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>1319</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1397</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>1451</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1456</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1479</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1492</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>1703</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>1721</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1730</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>1737</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>
@@ -71072,19 +71054,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.FSVisitor.java">org/apache/hadoop/hbase/util/FSVisitor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>57</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>
@@ -71093,13 +71075,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.FileStatusFilter.java">org/apache/hadoop/hbase/util/FileStatusFilter.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>
@@ -71108,13 +71090,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.GetJavaProperty.java">org/apache/hadoop/hbase/util/GetJavaProperty.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -71123,25 +71105,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HBaseConfTool.java">org/apache/hadoop/hbase/util/HBaseConfTool.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>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -71150,457 +71132,457 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HBaseFsck.java">org/apache/hadoop/hbase/util/HBaseFsck.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>712</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 11, expected level should be 10.</td>
 <td>770</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>848</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'regionName' must be private and have accessor methods.</td>
 <td>875</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'metaFirstKey' must be private and have accessor methods.</td>
 <td>876</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'metaLastKey' must be private and have accessor methods.</td>
 <td>877</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'storesFirstKey' must be private and have accessor methods.</td>
 <td>878</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'storesLastKey' must be private and have accessor methods.</td>
 <td>879</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>881</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>935</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>937</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1012</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>1047</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1144</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1149</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1199</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1203</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 118).</td>
 <td>1209</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>1210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>1218</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>1219</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>1221</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1235</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>1369</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>1370</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>1372</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1390</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>1391</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1395</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>1406</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>1425</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>1426</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>1455</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 123).</td>
 <td>1458</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>1469</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>1611</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>1612</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1615</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' has incorrect indentation level 7, expected level should be 6.</td>
 <td>1650</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 9, expected level should be 8.</td>
 <td>1653</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 rcurly' has incorrect indentation level 7, expected level should be 6.</td>
 <td>1654</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>1782</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>')' is preceded with whitespace.</td>
 <td>1972</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2100</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2142</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>
 <td>Method length is 235 lines (max allowed is 150).</td>
 <td>2163</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2166</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2238</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>2404</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>2615</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>2656</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>2657</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>'.' has incorrect indentation level 10, expected level should be 12.</td>
 <td>2683</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'errorCount' must be private and have accessor methods.</td>
 <td>2881</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>2945</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>3111</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>3182</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 115).</td>
 <td>3495</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>3538</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>3543</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>3544</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>3551</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>3556</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>3563</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
 <td>3565</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>3568</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 145).</td>
 <td>3570</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>3571</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 179).</td>
 <td>3572</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>3574</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>3599</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>3600</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 39 should have line break after.</td>
 <td>3616</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>
@@ -71609,50 +71591,50 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HBaseFsckRepair.java">org/apache/hadoop/hbase/util/HBaseFsckRepair.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>55</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>87</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>88</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>89</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>90</td></tr>
+<td>89</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>90</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
@@ -71660,13 +71642,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HBaseHomePath.java">org/apache/hadoop/hbase/util/HBaseHomePath.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -71675,55 +71657,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HFileArchiveTestingUtil.java">org/apache/hadoop/hbase/util/HFileArchiveTestingUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class HFileArchiveTestingUtil should be declared as final.</td>
 <td>41</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>89</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>103</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>135</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>137</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>192</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>193</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -71732,73 +71714,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HFileArchiveUtil.java">org/apache/hadoop/hbase/util/HFileArchiveUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>195</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>196</td></tr>
+<td>195</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>196</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>199</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HFileTestUtil.java">org/apache/hadoop/hbase/util/HFileTestUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>53</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>76</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
-<td>90</td></tr>
+<td>76</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
+<td>90</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'method def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>104</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.Hash.java">org/apache/hadoop/hbase/util/Hash.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>
@@ -71807,13 +71789,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HashKey.java">org/apache/hadoop/hbase/util/HashKey.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>
@@ -71822,19 +71804,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.HashedBytes.java">org/apache/hadoop/hbase/util/HashedBytes.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>53</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -71843,19 +71825,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.JSONBean.java">org/apache/hadoop/hbase/util/JSONBean.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -71864,38 +71846,38 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.JVM.java">org/apache/hadoop/hbase/util/JVM.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 14, expected level should be one of the following: 12, 23, 24.</td>
 <td>162</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>167</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>207</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>208</td></tr>
+<td>207</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>208</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>
@@ -71903,68 +71885,68 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.JVMClusterUtil.java">org/apache/hadoop/hbase/util/JVMClusterUtil.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 'java.io.IOException' 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>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>41</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>125</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>163</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>164</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>245</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>246</td></tr>
+<td>245</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>246</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>
@@ -71972,72 +71954,66 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.JenkinsHash.java">org/apache/hadoop/hbase/util/JenkinsHash.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>87</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>90</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>93</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>96</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>99</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 158 lines (max allowed is 150).</td>
 <td>104</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>109</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
@@ -72046,161 +72022,167 @@
 <td>109</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>109</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>189</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>190</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>191</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>192</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>193</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>194</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>195</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>196</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>197</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>198</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>199</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>200</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>201</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>202</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>203</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>204</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>205</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>206</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>209</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>211</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>213</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>214</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>215</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>
@@ -72209,25 +72191,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.JvmPauseMonitor.java">org/apache/hadoop/hbase/util/JvmPauseMonitor.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.metrics.JvmPauseMonitorSource' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.conf.Configuration' import.</td>
 <td>31</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -72236,43 +72218,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.KeyLocker.java">org/apache/hadoop/hbase/util/KeyLocker.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>'method def modifier' has incorrect indentation level 12, expected level should be one of the following: 6, 8.</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 14, expected level should be one of the following: 8, 10.</td>
 <td>56</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 12, expected level should be one of the following: 6, 8.</td>
 <td>57</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 10, expected level should be one of the following: 4, 6.</td>
 <td>58</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>64</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -72281,19 +72263,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.LeaseNotRecoveredException.java">org/apache/hadoop/hbase/util/LeaseNotRecoveredException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'ctor def' child has incorrect indentation level 6, expected level should be 4.</td>
 <td>39</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -72302,13 +72284,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithMOB.java">org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithMOB.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>
@@ -72317,19 +72299,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.LoadTestDataGeneratorWithTags.java">org/apache/hadoop/hbase/util/LoadTestDataGeneratorWithTags.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.Cell' import.</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -72338,43 +72320,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.LoadTestTool.java">org/apache/hadoop/hbase/util/LoadTestTool.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Admin' import.</td>
 <td>45</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>336</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 8, expected level should be 6.</td>
 <td>586</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>
 <td>Method length is 191 lines (max allowed is 150).</td>
 <td>595</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>668</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -72383,13 +72365,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.LogMonitoring.java">org/apache/hadoop/hbase/util/LogMonitoring.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>
@@ -72398,46 +72380,46 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MD5Hash.java">org/apache/hadoop/hbase/util/MD5Hash.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>34</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>40</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>53</td></tr>
+<td>40</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>53</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>54</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ManualEnvironmentEdge.java">org/apache/hadoop/hbase/util/ManualEnvironmentEdge.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -72446,19 +72428,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MapreduceDependencyClasspathTool.java">org/apache/hadoop/hbase/util/MapreduceDependencyClasspathTool.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
 <td>52</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>
@@ -72467,32 +72449,32 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MockServer.java">org/apache/hadoop/hbase/util/MockServer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>54</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>61</td></tr>
 <tr 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>62</td></tr>
+<td>61</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>62</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
@@ -72500,55 +72482,55 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ModifyRegionUtils.java">org/apache/hadoop/hbase/util/ModifyRegionUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.yetus.audience.InterfaceAudience' import.</td>
 <td>42</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>106</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>111</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>132</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 117).</td>
 <td>136</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>138</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>171</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>
@@ -72557,13 +72539,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MoveWithAck.java">org/apache/hadoop/hbase/util/MoveWithAck.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>
@@ -72572,13 +72554,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MoveWithoutAck.java">org/apache/hadoop/hbase/util/MoveWithoutAck.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>
@@ -72587,31 +72569,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MultiThreadedAction.java">org/apache/hadoop/hbase/util/MultiThreadedAction.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 117).</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 119).</td>
 <td>82</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>
 <td>Method length is 166 lines (max allowed is 150).</td>
 <td>326</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -72620,13 +72602,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MultiThreadedReader.java">org/apache/hadoop/hbase/util/MultiThreadedReader.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -72635,13 +72617,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MultiThreadedReaderWithACL.java">org/apache/hadoop/hbase/util/MultiThreadedReaderWithACL.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -72650,121 +72632,121 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MultiThreadedUpdater.java">org/apache/hadoop/hbase/util/MultiThreadedUpdater.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.test.LoadTestDataGenerator' import.</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>169</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 18, expected level should be 20.</td>
 <td>206</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>208</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>209</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>211</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 18, expected level should be 20.</td>
 <td>212</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>213</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>216</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>217</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>218</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>219</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 18, expected level should be 20.</td>
 <td>220</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>221</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 20, expected level should be 22.</td>
 <td>222</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>269</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>
@@ -72773,19 +72755,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MultiThreadedWriter.java">org/apache/hadoop/hbase/util/MultiThreadedWriter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 113).</td>
 <td>126</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>
@@ -72794,13 +72776,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MunkresAssignment.java">org/apache/hadoop/hbase/util/MunkresAssignment.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>
@@ -72809,88 +72791,88 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.MurmurHash3.java">org/apache/hadoop/hbase/util/MurmurHash3.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>69</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>70</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>73</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>77</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>78</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>79</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>80</td></tr>
+<td>79</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
+<td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
+<td>80</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>81</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.NettyEventLoopGroupConfig.java">org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.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>
@@ -72899,271 +72881,271 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.OrderedBytes.java">org/apache/hadoop/hbase/util/OrderedBytes.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>268</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>346</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>346</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>348</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>463</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>464</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>465</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>466</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>467</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>468</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>469</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>470</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>471</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>581</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
 <td>'(' is followed by whitespace.</td>
 <td>582</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>604</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
 <td>Empty statement.</td>
 <td>605</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 37 should have line break after.</td>
 <td>651</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 36 should have line break after.</td>
 <td>652</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 49 should have line break after.</td>
 <td>726</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 48 should have line break after.</td>
 <td>727</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 60 should have line break after.</td>
 <td>728</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>836</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>920</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>921</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>922</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>923</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>942</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>943</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>944</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>961</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>977</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>985</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
 <td>Empty statement.</td>
 <td>986</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1003</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>1005</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>1102</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
 <td>Empty statement.</td>
 <td>1103</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1142</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1164</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1199</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>1756</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
@@ -73172,103 +73154,103 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.Pair.java">org/apache/hadoop/hbase/util/Pair.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>28</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>29</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 1 should be on the previous line.</td>
 <td>33</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>42</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>51</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>73</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>100</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>105</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>112</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 3 should be on the previous line.</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>120</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>122</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>124</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>
@@ -73277,100 +73259,100 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.PairOfSameType.java">org/apache/hadoop/hbase/util/PairOfSameType.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>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' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>82</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>103</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>104</td></tr>
+<td>103</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>104</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>blocks</td>
+<td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>105</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.PoolMap.java">org/apache/hadoop/hbase/util/PoolMap.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>253</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>254</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 4, expected level should be 6.</td>
 <td>255</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>256</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -73379,13 +73361,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.PositionedByteRange.java">org/apache/hadoop/hbase/util/PositionedByteRange.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>
@@ -73394,46 +73376,46 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.PrettyPrinter.java">org/apache/hadoop/hbase/util/PrettyPrinter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>34</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>75</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>76</td></tr>
+<td>75</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>76</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>151</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ProcessBasedLocalHBaseCluster.java">org/apache/hadoop/hbase/util/ProcessBasedLocalHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -73442,19 +73424,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ReflectionUtils.java">org/apache/hadoop/hbase/util/ReflectionUtils.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 'edu.umd.cs.findbugs.annotations.NonNull' import.</td>
 <td>35</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -73463,25 +73445,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.RegionMover.java">org/apache/hadoop/hbase/util/RegionMover.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class RegionMover should be declared as final.</td>
 <td>82</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>183</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>
@@ -73490,136 +73472,136 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.RegionSplitCalculator.java">org/apache/hadoop/hbase/util/RegionSplitCalculator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes.ByteArrayComparator' import.</td>
 <td>32</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>52</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>86</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>88</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>90</td></tr>
+<td>88</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>90</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>222</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.RegionSplitter.java">org/apache/hadoop/hbase/util/RegionSplitter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>140</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>389</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>431</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>
 <td>Method length is 198 lines (max allowed is 150).</td>
 <td>453</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>454</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>570</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>655</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>739</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>748</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>779</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>780</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>794</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>820</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -73628,13 +73610,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.RetryCounter.java">org/apache/hadoop/hbase/util/RetryCounter.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>
@@ -73643,37 +73625,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.RollingStatCalculator.java">org/apache/hadoop/hbase/util/RollingStatCalculator.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>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>61</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 5 should be on the previous line.</td>
 <td>73</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>81</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>
@@ -73682,25 +73664,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ServerCommandLine.java">org/apache/hadoop/hbase/util/ServerCommandLine.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>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>132</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -73709,19 +73691,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ServerRegionReplicaUtil.java">org/apache/hadoop/hbase/util/ServerRegionReplicaUtil.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>120</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>
@@ -73730,13 +73712,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ShutdownHookManager.java">org/apache/hadoop/hbase/util/ShutdownHookManager.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -73745,13 +73727,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.SimpleByteRange.java">org/apache/hadoop/hbase/util/SimpleByteRange.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EqualsHashCode</td>
@@ -73760,26 +73742,26 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.SimpleMutableByteRange.java">org/apache/hadoop/hbase/util/SimpleMutableByteRange.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>124</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>131</td></tr>
+<td>124</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>131</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>EqualsHashCode</td>
 <td>Definition of 'equals()' without corresponding definition of 'hashCode()'.</td>
@@ -73787,13 +73769,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.SimplePositionedByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedByteRange.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
@@ -73802,52 +73784,52 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.SimplePositionedMutableByteRange.java">org/apache/hadoop/hbase/util/SimplePositionedMutableByteRange.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>183</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>190</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>217</td></tr>
+<td>190</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>217</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>224</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.StealJobQueue.java">org/apache/hadoop/hbase/util/StealJobQueue.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 'java.util.Comparator' 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>blocks</td>
 <td>NeedBraces</td>
@@ -73856,13 +73838,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.StoppableImplementation.java">org/apache/hadoop/hbase/util/StoppableImplementation.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>
@@ -73871,19 +73853,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestBloomFilterChunk.java">org/apache/hadoop/hbase/util/TestBloomFilterChunk.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -73892,94 +73874,94 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestCompressionTest.java">org/apache/hadoop/hbase/util/TestCompressionTest.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>'try' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>115</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>116</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>119</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>120</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>122</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>123</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>124</td></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
-<td>125</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
-<td>126</td></tr>
+<td>125</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
+<td>126</td></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'try' child has incorrect indentation level 12, expected level should be 10.</td>
 <td>129</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestCoprocessorScanPolicy.java">org/apache/hadoop/hbase/util/TestCoprocessorScanPolicy.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>
@@ -73988,61 +73970,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestFSTableDescriptors.java">org/apache/hadoop/hbase/util/TestFSTableDescriptors.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>212</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>227</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>238</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>266</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>274</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>298</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>301</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>353</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>
@@ -74051,43 +74033,43 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestFSUtils.java">org/apache/hadoop/hbase/util/TestFSUtils.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>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'try rcurly' has incorrect indentation level 6, expected level should be 4.</td>
 <td>143</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>150</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>185</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 122).</td>
 <td>343</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>
@@ -74096,13 +74078,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestHBaseFsckMOB.java">org/apache/hadoop/hbase/util/TestHBaseFsckMOB.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>
@@ -74111,13 +74093,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestIdLock.java">org/apache/hadoop/hbase/util/TestIdLock.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>
@@ -74126,61 +74108,61 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestIdReadWriteLockWithObjectPool.java">org/apache/hadoop/hbase/util/TestIdReadWriteLockWithObjectPool.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>'for' construct must use '{}'s.</td>
 <td>125</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>135</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>137</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>138</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>139</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>142</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>143</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
 <td>144</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>
@@ -74189,13 +74171,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestMiniClusterLoadEncoded.java">org/apache/hadoop/hbase/util/TestMiniClusterLoadEncoded.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>whitespace</td>
 <td>ParenPad</td>
@@ -74204,13 +74186,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestMiniClusterLoadSequential.java">org/apache/hadoop/hbase/util/TestMiniClusterLoadSequential.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>
@@ -74219,13 +74201,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestRegionMover2.java">org/apache/hadoop/hbase/util/TestRegionMover2.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>
@@ -74234,19 +74216,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestRegionMoverWithRSGroupEnable.java">org/apache/hadoop/hbase/util/TestRegionMoverWithRSGroupEnable.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.junit.Assert.assertEquals' import.</td>
 <td>48</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74255,73 +74237,73 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestRegionSplitter.java">org/apache/hadoop/hbase/util/TestRegionSplitter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>65</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>66</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>67</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'member def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>69</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 modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>72</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 4, expected level should be 2.</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 4, expected level should be 2.</td>
 <td>77</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be 4.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -74330,76 +74312,76 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.TestSortedList.java">org/apache/hadoop/hbase/util/TestSortedList.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>AvoidStarImport</td>
 <td>Using the '.*' form of import should be avoided - org.junit.Assert.*.</td>
 <td>20</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>sizes</td>
-<td>LineLength</td>
-<td>Line is longer than 100 characters (found 116).</td>
-<td>78</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>113</td></tr>
+<td>78</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
+<td>Line is longer than 100 characters (found 116).</td>
+<td>113</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>165</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.Threads.java">org/apache/hadoop/hbase/util/Threads.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>102</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>115</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>116</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>119</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
@@ -74408,259 +74390,259 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.Triple.java">org/apache/hadoop/hbase/util/Triple.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>blocks</td>
-<td>NeedBraces</td>
-<td>'if' construct must use '{}'s.</td>
-<td>64</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>66</td></tr>
+<td>64</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>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>68</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.UnsafeAccess.java">org/apache/hadoop/hbase/util/UnsafeAccess.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>170</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>171</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>184</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>185</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>197</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>198</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>212</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>213</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>226</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>227</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>239</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>240</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>254</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>255</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>268</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>269</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>281</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>282</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>314</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>315</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>316</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>317</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>318</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>347</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>348</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>349</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>350</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>351</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>371</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>372</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>373</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>374</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>375</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>467</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>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
+<td>467</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>468</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.UnsafeAvailChecker.java">org/apache/hadoop/hbase/util/UnsafeAvailChecker.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -74669,13 +74651,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.VersionInfo.java">org/apache/hadoop/hbase/util/VersionInfo.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -74684,208 +74666,208 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.Writables.java">org/apache/hadoop/hbase/util/Writables.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.io.DataInputBuffer' import.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>92</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>94</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>95</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>97</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>100</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>111</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>113</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</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>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>116</td></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>indentation</td>
-<td>Indentation</td>
-<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>120</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>146</td></tr>
+<td>120</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
+<td>146</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>indentation</td>
+<td>Indentation</td>
+<td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>158</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.ZKDataMigrator.java">org/apache/hadoop/hbase/util/ZKDataMigrator.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.zookeeper.ZKUtil' import.</td>
 <td>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class ZKDataMigrator should be declared as final.</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>64</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>72</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>73</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>74</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>77</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>78</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>79</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>81</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 10, expected level should be 12.</td>
 <td>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 8, expected level should be 10.</td>
 <td>84</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>99</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -74894,19 +74876,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.compaction.TestMajorCompactor.java">org/apache/hadoop/hbase/util/compaction/TestMajorCompactor.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.junit.After' import.</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
@@ -74915,88 +74897,88 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.hbck.HFileCorruptionChecker.java">org/apache/hadoop/hbase/util/hbck/HFileCorruptionChecker.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>161</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>194</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>263</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>298</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>332</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>335</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>480</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>516</td></tr>
+<td>480</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>516</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>524</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.hbck.HbckTestingUtil.java">org/apache/hadoop/hbase/util/hbck/HbckTestingUtil.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>30</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>35</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>
@@ -75005,13 +74987,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.hbck.ReplicationChecker.java">org/apache/hadoop/hbase/util/hbck/ReplicationChecker.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>
@@ -75020,64 +75002,64 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.test.LoadTestDataGenerator.java">org/apache/hadoop/hbase/util/test/LoadTestDataGenerator.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.client.Get' import.</td>
 <td>24</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>147</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>148</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>150</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>158</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>159</td></tr>
+<td>158</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>159</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>161</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.util.test.LoadTestDataGeneratorWithACL.java">org/apache/hadoop/hbase/util/test/LoadTestDataGeneratorWithACL.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>
@@ -75086,19 +75068,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.BoundedGroupingStrategy.java">org/apache/hadoop/hbase/wal/BoundedGroupingStrategy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>ImportOrder</td>
 <td>Wrong order for 'org.apache.hadoop.hbase.util.Bytes' import.</td>
 <td>28</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -75107,19 +75089,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.DisabledWALProvider.java">org/apache/hadoop/hbase/wal/DisabledWALProvider.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>LeftCurly</td>
 <td>'{' at column 49 should have line break after.</td>
 <td>198</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -75128,37 +75110,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.IOTestProvider.java">org/apache/hadoop/hbase/wal/IOTestProvider.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>176</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>177</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>185</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>244</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -75167,13 +75149,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.NamespaceGroupingStrategy.java">org/apache/hadoop/hbase/wal/NamespaceGroupingStrategy.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>
@@ -75182,13 +75164,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.NettyAsyncFSWALConfigHelper.java">org/apache/hadoop/hbase/wal/NettyAsyncFSWALConfigHelper.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>
@@ -75197,13 +75179,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.OutputSink.java">org/apache/hadoop/hbase/wal/OutputSink.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>
@@ -75212,13 +75194,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.RecoveredEditsOutputSink.java">org/apache/hadoop/hbase/wal/RecoveredEditsOutputSink.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
@@ -75227,25 +75209,25 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.TestBoundedRegionGroupingStrategy.java">org/apache/hadoop/hbase/wal/TestBoundedRegionGroupingStrategy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be one of the following: 8, 21.</td>
 <td>142</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 12, expected level should be one of the following: 10, 23.</td>
 <td>154</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>
@@ -75254,131 +75236,131 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.TestFSHLogProvider.java">org/apache/hadoop/hbase/wal/TestFSHLogProvider.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>168</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>177</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>178</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>264</td></tr>
+<td>178</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>264</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>340</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.TestWALFactory.java">org/apache/hadoop/hbase/wal/TestWALFactory.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>175</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
 <td>222</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>234</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>287</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>301</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>308</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>324</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>331</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>335</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>340</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
 <td>399</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>477</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>540</td></tr>
+<td>477</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>540</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>
@@ -75386,31 +75368,31 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.TestWALFiltering.java">org/apache/hadoop/hbase/wal/TestWALFiltering.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>113</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'org' has incorrect indentation level 2, expected level should be 4.</td>
 <td>114</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
 <td>149</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>
@@ -75419,19 +75401,19 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.TestWALMethods.java">org/apache/hadoop/hbase/wal/TestWALMethods.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>83</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
@@ -75440,13 +75422,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.TestWALOpenAfterDNRollingStart.java">org/apache/hadoop/hbase/wal/TestWALOpenAfterDNRollingStart.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -75455,13 +75437,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.TestWALRootDir.java">org/apache/hadoop/hbase/wal/TestWALRootDir.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -75470,85 +75452,85 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.TestWALSplit.java">org/apache/hadoop/hbase/wal/TestWALSplit.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>227</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>682</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'while' construct must use '{}'s.</td>
 <td>818</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>889</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'array initialization' child has incorrect indentation level 10, expected level should be 8.</td>
 <td>890</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 modifier' has incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td>914</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 12, 14.</td>
 <td>916</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 8, expected level should be one of the following: 12, 14.</td>
 <td>917</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 10, 12.</td>
 <td>918</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 8, 10.</td>
 <td>919</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1034</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>1038</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>
@@ -75557,52 +75539,52 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WAL.java">org/apache/hadoop/hbase/wal/WAL.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>183</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
 <td>184</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>185</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>186</td></tr>
+<td>185</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>186</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>222</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALFactory.java">org/apache/hadoop/hbase/wal/WALFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -75611,13 +75593,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALKey.java">org/apache/hadoop/hbase/wal/WALKey.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>
@@ -75626,131 +75608,131 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALKeyImpl.java">org/apache/hadoop/hbase/wal/WALKeyImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>291</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>292</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>309</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>332</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>333</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>334</td></tr>
+<td>333</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>334</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>335</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALPerformanceEvaluation.java">org/apache/hadoop/hbase/wal/WALPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>173</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>
 <td>Method length is 193 lines (max allowed is 150).</td>
 <td>202</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>355</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>358</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>379</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>411</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>413</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>439</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>569</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>577</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>579</td></tr>
+<td>577</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>579</td></tr>
+<tr class="b">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 5, expected level should be 4.</td>
@@ -75758,37 +75740,37 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.wal.WALSplitter.java">org/apache/hadoop/hbase/wal/WALSplitter.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 'edu.umd.cs.findbugs.annotations.Nullable' import.</td>
 <td>32</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - edu.umd.cs.findbugs.annotations.Nullable.</td>
 <td>32</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 'javax.validation.constraints.Null' import.</td>
 <td>65</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>imports</td>
 <td>UnusedImports</td>
 <td>Unused import - javax.validation.constraints.Null.</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -75797,13 +75779,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ReadOnlyZKClient.java">org/apache/hadoop/hbase/zookeeper/ReadOnlyZKClient.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>
@@ -75812,40 +75794,40 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZKConfig.java">org/apache/hadoop/hbase/zookeeper/ZKConfig.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
-<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
-<td>javadoc</td>
-<td>NonEmptyAtclauseDescription</td>
-<td>At-clause should have a non-empty description.</td>
-<td>119</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>212</td></tr>
+<td>119</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>212</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>214</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZKMetadata.java">org/apache/hadoop/hbase/zookeeper/ZKMetadata.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -75854,13 +75836,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZKWatcher.java">org/apache/hadoop/hbase/zookeeper/ZKWatcher.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>
@@ -75869,115 +75851,115 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZNodePaths.java">org/apache/hadoop/hbase/zookeeper/ZNodePaths.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'baseZNode' must be private and have accessor methods.</td>
 <td>49</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'rsZNode' must be private and have accessor methods.</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'drainingZNode' must be private and have accessor methods.</td>
 <td>66</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'masterAddressZNode' must be private and have accessor methods.</td>
 <td>68</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'backupMasterAddressesZNode' must be private and have accessor methods.</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'clusterStateZNode' must be private and have accessor methods.</td>
 <td>72</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'tableZNode' must be private and have accessor methods.</td>
 <td>78</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'clusterIdZNode' must be private and have accessor methods.</td>
 <td>80</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'splitLogZNode' must be private and have accessor methods.</td>
 <td>82</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'balancerZNode' must be private and have accessor methods.</td>
 <td>84</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'regionNormalizerZNode' must be private and have accessor methods.</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'switchZNode' must be private and have accessor methods.</td>
 <td>88</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'namespaceZNode' must be private and have accessor methods.</td>
 <td>90</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'masterMaintZNode' must be private and have accessor methods.</td>
 <td>92</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'replicationZNode' must be private and have accessor methods.</td>
 <td>95</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'peersZNode' must be private and have accessor methods.</td>
 <td>97</td></tr>
-<tr class="a">
+<tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'queuesZNode' must be private and have accessor methods.</td>
 <td>99</td></tr>
-<tr class="b">
+<tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -75986,13 +75968,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.zookeeper.ZooKeeperHelper.java">org/apache/hadoop/hbase/zookeeper/ZooKeeperHelper.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>
@@ -76001,13 +75983,13 @@
 <div class="section">
 <h3 id="org.apache.hadoop.metrics2.lib.TestMutableRangeHistogram.java">org/apache/hadoop/metrics2/lib/TestMutableRangeHistogram.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>
@@ -76021,7 +76003,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle.rss b/checkstyle.rss
index d1c0377..b141e9e 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@
     <language>en-us</language>
     <copyright>&#169;2007 - 2020 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 4309,
-             Errors: 9267,
+      <title>File: 4310,
+             Errors: 9264,
              Warnings: 0,
              Infos: 0
       </title>
@@ -10975,7 +10975,7 @@
                   0
                 </td>
                 <td>
-                  2
+                  1
                 </td>
               </tr>
                           <tr>
@@ -16771,7 +16771,7 @@
                   0
                 </td>
                 <td>
-                  41
+                  40
                 </td>
               </tr>
                           <tr>
@@ -36250,6 +36250,20 @@
               </tr>
                           <tr>
                 <td>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl.java">org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.ByteArrayOutputStream.java">org/apache/hadoop/hbase/io/ByteArrayOutputStream.java</a>
                 </td>
                 <td>
@@ -44225,7 +44239,7 @@
                   0
                 </td>
                 <td>
-                  3
+                  2
                 </td>
               </tr>
                           <tr>
diff --git a/coc.html b/coc.html
index d7a017e..80592cd 100644
--- a/coc.html
+++ b/coc.html
@@ -241,7 +241,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index 1bee4b9..693f102 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -313,7 +313,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index c96db9a..62175b8 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -824,7 +824,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index f50f1af..5bb95c2 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -194,7 +194,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index a82324d..3814171 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1019,7 +1019,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 05275a4..3caf5f9 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -2267,7 +2267,6 @@
 <li><a href="org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure" target="classFrame">ReopenTableRegionsProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplaySyncReplicationWALCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplaySyncReplicationWALCallable</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">Replication</a></li>
-<li><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">Replication.ReplicationStatisticsTask</a></li>
 <li><a href="org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner" target="classFrame">ReplicationBarrierCleaner</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationBarrierFamilyFormat</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.ReplicationBarrierResult.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationBarrierFamilyFormat.ReplicationBarrierResult</a></li>
@@ -2304,6 +2303,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><span class="interfaceName">ReplicationService</span></a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplicationSink</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver" target="classFrame"><span class="interfaceName">ReplicationSinkService</span></a></li>
+<li><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationSinkServiceImpl</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplicationSource</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplicationSource.LogsComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplicationSourceFactory</a></li>
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index e678b8a..71e59f3 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -2267,7 +2267,6 @@
 <li><a href="org/apache/hadoop/hbase/master/procedure/ReopenTableRegionsProcedure.html" title="class in org.apache.hadoop.hbase.master.procedure">ReopenTableRegionsProcedure</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplaySyncReplicationWALCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplaySyncReplicationWALCallable</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></li>
-<li><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></li>
 <li><a href="org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.html" title="class in org.apache.hadoop.hbase.replication">ReplicationBarrierFamilyFormat</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.ReplicationBarrierResult.html" title="class in org.apache.hadoop.hbase.replication">ReplicationBarrierFamilyFormat.ReplicationBarrierResult</a></li>
@@ -2304,6 +2303,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="interfaceName">ReplicationService</span></a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></li>
 <li><a href="org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="interfaceName">ReplicationSinkService</span></a></li>
+<li><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource.LogsComparator</a></li>
 <li><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceFactory.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceFactory</a></li>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 930b818..724c9e0 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -2438,426 +2438,433 @@
 <td class="colLast"><code>"hbase.replication.sink.service"</code></td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">
+<!--   -->
+</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/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</a></code></td>
+<td class="colLast"><code>"org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl"</code></td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_MAXTHREADS_DEFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_DEFAULT">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></code></td>
 <td class="colLast"><code>10</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_MAXTHREADS_KEY">
 <!--   -->
 </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/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_KEY">REPLICATION_SOURCE_MAXTHREADS_KEY</a></code></td>
 <td class="colLast"><code>"hbase.replication.source.maxthreads"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME">
 <!--   -->
 </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/HConstants.html#REPLICATION_SOURCE_SERVICE_CLASSNAME">REPLICATION_SOURCE_SERVICE_CLASSNAME</a></code></td>
 <td class="colLast"><code>"hbase.replication.source.service"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT">
 <!--   -->
 </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/HConstants.html#REPLICATION_SOURCE_SHIPEDITS_TIMEOUT">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</a></code></td>
 <td class="colLast"><code>"replication.source.shipedits.timeout"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</a></code></td>
 <td class="colLast"><code>60000</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT">REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</a></code></td>
 <td class="colLast"><code>268435456</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_KEY">
 <!--   -->
 </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/HConstants.html#REPLICATION_SOURCE_TOTAL_BUFFER_KEY">REPLICATION_SOURCE_TOTAL_BUFFER_KEY</a></code></td>
 <td class="colLast"><code>"replication.total.buffer.quota"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.RPC_CODEC_CONF_KEY">
 <!--   -->
 </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/HConstants.html#RPC_CODEC_CONF_KEY">RPC_CODEC_CONF_KEY</a></code></td>
 <td class="colLast"><code>"hbase.client.rpc.codec"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.RPC_CURRENT_VERSION">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;byte</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#RPC_CURRENT_VERSION">RPC_CURRENT_VERSION</a></code></td>
 <td class="colLast"><code>0</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SEQNUM_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SEQNUM_QUALIFIER_STR">SEQNUM_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"seqnumDuringOpen"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SERVER_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SERVER_QUALIFIER_STR">SERVER_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"server"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SERVERNAME_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SERVERNAME_QUALIFIER_STR">SERVERNAME_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"sn"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SLOW_LOG_BUFFER_ENABLED_KEY">
 <!--   -->
 </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/HConstants.html#SLOW_LOG_BUFFER_ENABLED_KEY">SLOW_LOG_BUFFER_ENABLED_KEY</a></code></td>
 <td class="colLast"><code>"hbase.regionserver.slowlog.buffer.enabled"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY">
 <!--   -->
 </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/HConstants.html#SLOW_LOG_SYS_TABLE_ENABLED_KEY">SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></code></td>
 <td class="colLast"><code>"hbase.regionserver.slowlog.systable.enabled"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SLOWLOG_INFO_FAMILY_STR">
 <!--   -->
 </a><code>private&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/HConstants.html#SLOWLOG_INFO_FAMILY_STR">SLOWLOG_INFO_FAMILY_STR</a></code></td>
 <td class="colLast"><code>"info"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SNAPSHOT_DIR_NAME">
 <!--   -->
 </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/HConstants.html#SNAPSHOT_DIR_NAME">SNAPSHOT_DIR_NAME</a></code></td>
 <td class="colLast"><code>".hbase-snapshot"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME">
 <!--   -->
 </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/HConstants.html#SNAPSHOT_RESTORE_FAILSAFE_NAME">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></code></td>
 <td class="colLast"><code>"hbase.snapshot.restore.failsafe.name"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">
 <!--   -->
 </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/HConstants.html#SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></code></td>
 <td class="colLast"><code>"hbase.snapshot.restore.take.failsafe.snapshot"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SOCKET_RETRY_WAIT_MS">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#SOCKET_RETRY_WAIT_MS">SOCKET_RETRY_WAIT_MS</a></code></td>
 <td class="colLast"><code>200</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SPLIT_LOGDIR_NAME">
 <!--   -->
 </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/HConstants.html#SPLIT_LOGDIR_NAME">SPLIT_LOGDIR_NAME</a></code></td>
 <td class="colLast"><code>"splitWAL"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SPLITA_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SPLITA_QUALIFIER_STR">SPLITA_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"splitA"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SPLITB_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#SPLITB_QUALIFIER_STR">SPLITB_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"splitB"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STARTCODE_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#STARTCODE_QUALIFIER_STR">STARTCODE_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"serverstartcode"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATE_QUALIFIER_STR">
 <!--   -->
 </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/HConstants.html#STATE_QUALIFIER_STR">STATE_QUALIFIER_STR</a></code></td>
 <td class="colLast"><code>"state"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_ADDRESS">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_ADDRESS">STATUS_MULTICAST_ADDRESS</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.address.ip"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_BIND_ADDRESS">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_BIND_ADDRESS">STATUS_MULTICAST_BIND_ADDRESS</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.bind.address.ip"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_NI_NAME">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_NI_NAME">STATUS_MULTICAST_NI_NAME</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.ni.name"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_PORT">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_PORT">STATUS_MULTICAST_PORT</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.address.port"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">
 <!--   -->
 </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/HConstants.html#STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></code></td>
 <td class="colLast"><code>"hbase.status.multicast.publisher.bind.address.ip"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_PUBLISHED">
 <!--   -->
 </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/HConstants.html#STATUS_PUBLISHED">STATUS_PUBLISHED</a></code></td>
 <td class="colLast"><code>"hbase.status.published"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STATUS_PUBLISHED_DEFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;boolean</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#STATUS_PUBLISHED_DEFAULT">STATUS_PUBLISHED_DEFAULT</a></code></td>
 <td class="colLast"><code>false</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STORAGE_POLICY_PREFIX">
 <!--   -->
 </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/HConstants.html#STORAGE_POLICY_PREFIX">STORAGE_POLICY_PREFIX</a></code></td>
 <td class="colLast"><code>"storage_policy_"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.STORE_FILE_REF_COUNT_THRESHOLD">
 <!--   -->
 </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/HConstants.html#STORE_FILE_REF_COUNT_THRESHOLD">STORE_FILE_REF_COUNT_THRESHOLD</a></code></td>
 <td class="colLast"><code>"hbase.regions.recovery.store.file.ref.count"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.SYSTEMTABLE_QOS">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#SYSTEMTABLE_QOS">SYSTEMTABLE_QOS</a></code></td>
 <td class="colLast"><code>200</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.TABLE_FAMILY_STR">
 <!--   -->
 </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/HConstants.html#TABLE_FAMILY_STR">TABLE_FAMILY_STR</a></code></td>
 <td class="colLast"><code>"table"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.TABLE_MAX_ROWSIZE_DEFAULT">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;long</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#TABLE_MAX_ROWSIZE_DEFAULT">TABLE_MAX_ROWSIZE_DEFAULT</a></code></td>
 <td class="colLast"><code>1073741824L</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.TABLE_MAX_ROWSIZE_KEY">
 <!--   -->
 </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/HConstants.html#TABLE_MAX_ROWSIZE_KEY">TABLE_MAX_ROWSIZE_KEY</a></code></td>
 <td class="colLast"><code>"hbase.table.max.rowsize"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.TEMPORARY_FS_DIRECTORY_KEY">
 <!--   -->
 </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/HConstants.html#TEMPORARY_FS_DIRECTORY_KEY">TEMPORARY_FS_DIRECTORY_KEY</a></code></td>
 <td class="colLast"><code>"hbase.fs.tmp.dir"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.THREAD_WAKE_FREQUENCY">
 <!--   -->
 </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/HConstants.html#THREAD_WAKE_FREQUENCY">THREAD_WAKE_FREQUENCY</a></code></td>
 <td class="colLast"><code>"hbase.server.thread.wakefrequency"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.USE_META_REPLICAS">
 <!--   -->
 </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/HConstants.html#USE_META_REPLICAS">USE_META_REPLICAS</a></code></td>
 <td class="colLast"><code>"hbase.meta.replicas.use"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.UTF8_ENCODING">
 <!--   -->
 </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/HConstants.html#UTF8_ENCODING">UTF8_ENCODING</a></code></td>
 <td class="colLast"><code>"UTF-8"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.VERSION_FILE_NAME">
 <!--   -->
 </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/HConstants.html#VERSION_FILE_NAME">VERSION_FILE_NAME</a></code></td>
 <td class="colLast"><code>"hbase.version"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.VERSION_FILE_WRITE_ATTEMPTS">
 <!--   -->
 </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/HConstants.html#VERSION_FILE_WRITE_ATTEMPTS">VERSION_FILE_WRITE_ATTEMPTS</a></code></td>
 <td class="colLast"><code>"hbase.server.versionfile.writeattempts"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.VERSIONS">
 <!--   -->
 </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/HConstants.html#VERSIONS">VERSIONS</a></code></td>
 <td class="colLast"><code>"VERSIONS"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.WAL_STORAGE_POLICY">
 <!--   -->
 </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/HConstants.html#WAL_STORAGE_POLICY">WAL_STORAGE_POLICY</a></code></td>
 <td class="colLast"><code>"hbase.wal.storage.policy"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZEROES">
 <!--   -->
 </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/HConstants.html#ZEROES">ZEROES</a></code></td>
 <td class="colLast"><code>"00000000000000"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_CFG_PROPERTY_PREFIX">
 <!--   -->
 </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/HConstants.html#ZK_CFG_PROPERTY_PREFIX">ZK_CFG_PROPERTY_PREFIX</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property."</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL">
 <!--   -->
 </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/HConstants.html#ZK_CLIENT_KERBEROS_PRINCIPAL">ZK_CLIENT_KERBEROS_PRINCIPAL</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.client.kerberos.principal"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_CLIENT_KEYTAB_FILE">
 <!--   -->
 </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/HConstants.html#ZK_CLIENT_KEYTAB_FILE">ZK_CLIENT_KEYTAB_FILE</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.client.keytab.file"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_CONNECTION_REGISTRY_CLASS">
 <!--   -->
 </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/HConstants.html#ZK_CONNECTION_REGISTRY_CLASS">ZK_CONNECTION_REGISTRY_CLASS</a></code></td>
 <td class="colLast"><code>"org.apache.hadoop.hbase.client.ZKConnectionRegistry"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SERVER_KERBEROS_PRINCIPAL">
 <!--   -->
 </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/HConstants.html#ZK_SERVER_KERBEROS_PRINCIPAL">ZK_SERVER_KERBEROS_PRINCIPAL</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.server.kerberos.principal"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SERVER_KEYTAB_FILE">
 <!--   -->
 </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/HConstants.html#ZK_SERVER_KEYTAB_FILE">ZK_SERVER_KEYTAB_FILE</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.server.keytab.file"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SESSION_TIMEOUT">
 <!--   -->
 </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/HConstants.html#ZK_SESSION_TIMEOUT">ZK_SESSION_TIMEOUT</a></code></td>
 <td class="colLast"><code>"zookeeper.session.timeout"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;long</code></td>
 <td><code><a href="org/apache/hadoop/hbase/HConstants.html#ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS">ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS</a></code></td>
 <td class="colLast"><code>30000L</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZK_SYNC_BLOCKING_TIMEOUT_MS">
 <!--   -->
 </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/HConstants.html#ZK_SYNC_BLOCKING_TIMEOUT_MS">ZK_SYNC_BLOCKING_TIMEOUT_MS</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.sync.timeout.millis"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_CLIENT_PORT">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_CLIENT_PORT">ZOOKEEPER_CLIENT_PORT</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property.clientPort"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_DATA_DIR">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_DATA_DIR">ZOOKEEPER_DATA_DIR</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property.dataDir"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_MAX_CLIENT_CNXNS">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_MAX_CLIENT_CNXNS">ZOOKEEPER_MAX_CLIENT_CNXNS</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property.maxClientCnxns"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_QUORUM">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_QUORUM">ZOOKEEPER_QUORUM</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.quorum"</code></td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_TICK_TIME">
 <!--   -->
 </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/HConstants.html#ZOOKEEPER_TICK_TIME">ZOOKEEPER_TICK_TIME</a></code></td>
 <td class="colLast"><code>"hbase.zookeeper.property.tickTime"</code></td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.HConstants.ZOOKEEPER_ZNODE_PARENT">
 <!--   -->
 </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>
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 234cdf4..dd05686 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -7800,8 +7800,6 @@
 <dd>
 <div class="block">Builds a <code>RegionServerStatusProtos.RegionSpaceUseReportRequest</code> protobuf message from the region size map.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#buildReplicationLoad--">buildReplicationLoad()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#buildReplicationLoad-java.util.List-org.apache.hadoop.hbase.replication.regionserver.MetricsSink-">buildReplicationLoad(List&lt;ReplicationSourceInterface&gt;, MetricsSink)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></dt>
 <dd>
 <div class="block">buildReplicationLoad</div>
@@ -11957,6 +11955,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html#chore--">chore()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#chore--">chore()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsChore</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#chore--">chore()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl.ReplicationStatisticsChore</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ScheduledChore.html#chore--">chore()</a></span> - Method in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></dt>
 <dd>
 <div class="block">The task to execute on each scheduled execution of the Chore</div>
@@ -12947,6 +12949,12 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html#clearThreadLocals--">clearThreadLocals()</a></span> - Method in class org.apache.hadoop.hbase.mob.<a href="org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.html" title="class in org.apache.hadoop.hbase.mob">DefaultMobStoreCompactor</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#clearWALEntryBatch--">clearWALEntryBatch()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a></dt>
+<dd>
+<div class="block">Attempts to properly update <code>ReplicationSourceManager.totalBufferUser</code>,
+ in case there were unprocessed entries batched by the reader to the shipper,
+ but the shipper didn't manage to ship those because the replication source is being terminated.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/zookeeper/MetricsZooKeeperSourceImpl.html#clearZKExceptionMetrics--">clearZKExceptionMetrics()</a></span> - Method in class org.apache.hadoop.hbase.zookeeper.<a href="org/apache/hadoop/hbase/zookeeper/MetricsZooKeeperSourceImpl.html" title="class in org.apache.hadoop.hbase.zookeeper">MetricsZooKeeperSourceImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html#clearZNodes-java.lang.String-">clearZNodes(String)</a></span> - Method in class org.apache.hadoop.hbase.procedure.<a href="org/apache/hadoop/hbase/procedure/ZKProcedureUtil.html" title="class in org.apache.hadoop.hbase.procedure">ZKProcedureUtil</a></dt>
@@ -17165,6 +17173,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationPeers.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ZKReplicationStorageBase.html#conf">conf</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ZKReplicationStorageBase.html" title="class in org.apache.hadoop.hbase.replication">ZKReplicationStorageBase</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/RESTServer.html#conf">conf</a></span> - Static variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RESTServer.html" title="class in org.apache.hadoop.hbase.rest">RESTServer</a></dt>
@@ -56367,10 +56377,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html#getWriteTime--">getWriteTime()</a></span> - Method in class org.apache.hadoop.hbase.wal.<a href="org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#getWrittenBytes--">getWrittenBytes()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#getWrittenBytes--">getWrittenBytes()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSourceImpl</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/CommonFSUtils.html#getWrongWALRegionDir-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.TableName-java.lang.String-">getWrongWALRegionDir(Configuration, TableName, String)</a></span> - Static method in class org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/CommonFSUtils.html" title="class in org.apache.hadoop.hbase.util">CommonFSUtils</a></dt>
 <dd>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>
@@ -61885,17 +61891,17 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html#incrementAndGetRetries--">incrementAndGetRetries()</a></span> - Method in class org.apache.hadoop.hbase.master.assignment.<a href="org/apache/hadoop/hbase/master/assignment/RegionStates.RegionFailedOpen.html" title="class in org.apache.hadoop.hbase.master.assignment">RegionStates.RegionFailedOpen</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendCount--">incrementAppendCount()</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendCount-org.apache.hadoop.hbase.TableName-">incrementAppendCount(TableName)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></dt>
 <dd>
 <div class="block">Increment the count of wal appends</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendCount--">incrementAppendCount()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSourceImpl</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendCount-org.apache.hadoop.hbase.TableName-">incrementAppendCount(TableName)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSourceImpl</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-long-">incrementAppendSize(long)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">incrementAppendSize(TableName, long)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></dt>
 <dd>
 <div class="block">Add the append size.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendSize-long-">incrementAppendSize(long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSourceImpl</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">incrementAppendSize(TableName, long)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSourceImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendTime-long-">incrementAppendTime(long)</a></span> - Method in interface org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></dt>
 <dd>
@@ -63445,6 +63451,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#initialize--">initialize()</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/replication/ReplicationSinkServiceImpl.html#initialize-org.apache.hadoop.hbase.Server-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">initialize(Server, FileSystem, Path, Path, WALProvider)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/client/Client.html#initialize-org.apache.hadoop.hbase.rest.client.Cluster-boolean-">initialize(Cluster, boolean)</a></span> - Method in class org.apache.hadoop.hbase.rest.client.<a href="org/apache/hadoop/hbase/rest/client/Client.html" title="class in org.apache.hadoop.hbase.rest.client">Client</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminServiceImpl.html#initialize-org.apache.hadoop.hbase.master.MasterServices-">initialize(MasterServices)</a></span> - Method in class org.apache.hadoop.hbase.rsgroup.<a href="org/apache/hadoop/hbase/rsgroup/RSGroupAdminServiceImpl.html" title="class in org.apache.hadoop.hbase.rsgroup">RSGroupAdminServiceImpl</a></dt>
@@ -68162,10 +68170,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html#join--">join()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#join--">join()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
-<dd>
-<div class="block">Join with the replication threads</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html#join--">join()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a></dt>
 <dd>
 <div class="block">Terminate the replication on this region server</div>
@@ -72208,6 +72212,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication">ReplicationQueueInfo</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationTrackerZKImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationUtils.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationUtils.html" title="class in org.apache.hadoop.hbase.replication">ReplicationUtils</a></dt>
@@ -85661,6 +85667,10 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.MetricsTableValues.html#perStoreMixedReadCount">perStoreMixedReadCount</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/MetricsTableWrapperAggregateImpl.MetricsTableValues.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsTableWrapperAggregateImpl.MetricsTableValues</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#perTableAppendCount">perTableAppendCount</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSourceImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#perTableAppendSize">perTableAppendSize</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html" title="class in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSourceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/CanaryTool.RegionStdOutSink.html#perTableFailuresCount">perTableFailuresCount</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/CanaryTool.RegionStdOutSink.html" title="class in org.apache.hadoop.hbase.tool">CanaryTool.RegionStdOutSink</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/tool/CanaryTool.RegionStdOutSink.html#perTableReadLatency">perTableReadLatency</a></span> - Variable in class org.apache.hadoop.hbase.tool.<a href="org/apache/hadoop/hbase/tool/CanaryTool.RegionStdOutSink.html" title="class in org.apache.hadoop.hbase.tool">CanaryTool.RegionStdOutSink</a></dt>
@@ -89399,7 +89409,9 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.html#printStats">printStats</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/HFilePrettyPrinter.html" title="class in org.apache.hadoop.hbase.io.hfile">HFilePrettyPrinter</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#printStats-java.lang.String-">printStats(String)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#printStats-java.lang.String-">printStats(String)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsChore</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#printStats-java.lang.String-">printStats(String)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl.ReplicationStatisticsChore</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/util/HBaseFsck.html#printTableSummary-java.util.SortedMap-">printTableSummary(SortedMap&lt;TableName, HbckTableInfo&gt;)</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>
@@ -93854,6 +93866,8 @@
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#refreshAndGetReplicationLoad--">refreshAndGetReplicationLoad()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#refreshAndGetReplicationLoad--">refreshAndGetReplicationLoad()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html#refreshAndWait-java.util.Collection-">refreshAndWait(Collection&lt;RegionInfo&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.html" title="class in org.apache.hadoop.hbase.master.balancer">RegionLocationFinder</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/RpcServer.html#refreshAuthManager-org.apache.hadoop.conf.Configuration-org.apache.hadoop.security.authorize.PolicyProvider-">refreshAuthManager(Configuration, PolicyProvider)</a></span> - Method 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>
@@ -97543,10 +97557,8 @@
 <dd>
 <div class="block">Carry on the list of log entries down to the sink</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateLogEntries(List&lt;AdminProtos.WALEntry&gt;, CellScanner, String, String, String)</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
-<dd>
-<div class="block">Carry on the list of log entries down to the sink</div>
-</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateLogEntries(List&lt;AdminProtos.WALEntry&gt;, CellScanner, String, String, String)</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/AsyncRegionServerAdmin.html#replicateWALEntry-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-org.apache.hadoop.hbase.CellScanner-int-">replicateWALEntry(AdminProtos.ReplicateWALEntryRequest, CellScanner, int)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/AsyncRegionServerAdmin.html" title="class in org.apache.hadoop.hbase.client">AsyncRegionServerAdmin</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/RSRpcServices.html#replicateWALEntry-org.apache.hbase.thirdparty.com.google.protobuf.RpcController-org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.ReplicateWALEntryRequest-">replicateWALEntry(RpcController, AdminProtos.ReplicateWALEntryRequest)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a></dt>
@@ -97563,7 +97575,7 @@
 <dd>
 <div class="block">Empty constructor</div>
 </dd>
-<dt><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication.ReplicationStatisticsTask</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
+<dt><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication.ReplicationStatisticsChore</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
 <dd>
 <div class="block">Statistics task.</div>
 </dd>
@@ -97650,6 +97662,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME">REPLICATION_SINK_SERVICE_CLASSNAME</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_DEFAULT">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></span> - Static variable in class org.apache.hadoop.hbase.<a href="org/apache/hadoop/hbase/HConstants.html" title="class in org.apache.hadoop.hbase">HConstants</a></dt>
 <dd>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
@@ -97784,6 +97798,8 @@
 <dd>
 <div class="block">default constructor</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicationLoad">replicationLoad</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#replicationLoadSink">replicationLoadSink</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/replication/ReplicationLoadSink.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationLoadSink</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></dt>
@@ -97813,8 +97829,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#replicationManager">replicationManager</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#replicationManager">replicationManager</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationObserver</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
 <dd>
 <div class="block">An Observer to add HFile References to replication queue.</div>
@@ -97943,10 +97957,6 @@
 <dd>
 <div class="block">Gateway to Cluster Replication.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#replicationSink">replicationSink</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#replicationSink">replicationSink</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></dt>
-<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSink</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
 <dd>
 <div class="block">
@@ -97957,12 +97967,20 @@
 <dd>
 <div class="block">Create a sink for replication</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicationSink">replicationSink</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#replicationSinkHandler">replicationSinkHandler</a></span> - Variable 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><a href="org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ReplicationSinkService</span></a> - Interface in <a href="org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a></dt>
 <dd>
 <div class="block">A sink for a replication stream has to expose this service.</div>
 </dd>
+<dt><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationSinkServiceImpl</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#ReplicationSinkServiceImpl--">ReplicationSinkServiceImpl()</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
+<dt><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationSinkServiceImpl.ReplicationStatisticsChore</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSource</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
 <dd>
 <div class="block">Class that handles the source of a replication stream.</div>
@@ -98031,7 +98049,9 @@
 <dd>
 <div class="block">Creates a reader worker for a given WAL queue.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#ReplicationStatisticsTask-org.apache.hadoop.hbase.replication.regionserver.ReplicationSink-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager-">ReplicationStatisticsTask(ReplicationSink, ReplicationSourceManager)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#ReplicationStatisticsChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ReplicationStatisticsChore(String, Stoppable, int)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsChore</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#ReplicationStatisticsChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ReplicationStatisticsChore(String, Stoppable, int)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl.ReplicationStatisticsChore</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationStatus.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationStatus</span></a> - Class in <a href="org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></dt>
 <dd>&nbsp;</dd>
@@ -102063,8 +102083,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html#run-java.lang.String:A-">run(String[])</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.html" title="class in org.apache.hadoop.hbase.replication.regionserver">DumpReplicationQueues</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.NodeFailoverWorker.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.NodeFailoverWorker</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#run--">run()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a></dt>
@@ -102398,6 +102416,8 @@
 <div class="block">Check if the two files are equal by looking at the file length,
  and at the checksum (if user has specified the verifyChecksum flag).</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/HRegionServer.html#sameReplicationSourceAndSink">sameReplicationSourceAndSink</a></span> - Variable 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/metrics2/util/MetricSampleQuantiles.SampleItem.html#SampleItem-long-int-int-">SampleItem(long, int, int)</a></span> - Constructor for class org.apache.hadoop.metrics2.util.<a href="org/apache/hadoop/metrics2/util/MetricSampleQuantiles.SampleItem.html" title="class in org.apache.hadoop.metrics2.util">MetricSampleQuantiles.SampleItem</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/metrics2/util/MetricSampleQuantiles.html#samples">samples</a></span> - Variable in class org.apache.hadoop.metrics2.util.<a href="org/apache/hadoop/metrics2/util/MetricSampleQuantiles.html" title="class in org.apache.hadoop.metrics2.util">MetricSampleQuantiles</a></dt>
@@ -103333,10 +103353,6 @@
 <dd>
 <div class="block">Statistics thread schedule pool</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#scheduleThreadPool">scheduleThreadPool</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
-<dd>
-<div class="block">Statistics thread schedule pool</div>
-</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/ipc/RpcConnection.html#scheduleTimeoutTask-org.apache.hadoop.hbase.ipc.Call-">scheduleTimeoutTask(Call)</a></span> - Method in class org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/RpcConnection.html" title="class in org.apache.hadoop.hbase.ipc">RpcConnection</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html#schedUnlock--">schedUnlock()</a></span> - Method in class org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/AbstractProcedureScheduler.html" title="class in org.apache.hadoop.hbase.procedure2">AbstractProcedureScheduler</a></dt>
@@ -104663,6 +104679,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html#server">server</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html" title="class in org.apache.hadoop.hbase.replication">ReplicationEndpoint.Context</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#server">server</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/rest/RESTServer.html#server">server</a></span> - Variable in class org.apache.hadoop.hbase.rest.<a href="org/apache/hadoop/hbase/rest/RESTServer.html" title="class in org.apache.hadoop.hbase.rest">RESTServer</a></dt>
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase"><span class="typeNameLink">Server</span></a> - Interface in <a href="org/apache/hadoop/hbase/package-summary.html">org.apache.hadoop.hbase</a></dt>
@@ -110978,8 +110996,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html#sinkFs">sinkFs</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/HFileReplicator.html" title="class in org.apache.hadoop.hbase.replication.regionserver">HFileReplicator</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#sinkMetrics">sinkMetrics</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.SinkPeer.html#SinkPeer-org.apache.hadoop.hbase.ServerName-org.apache.hadoop.hbase.client.AsyncRegionServerAdmin-">SinkPeer(ServerName, AsyncRegionServerAdmin)</a></span> - Constructor for class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.SinkPeer.html" title="class in org.apache.hadoop.hbase.replication">HBaseReplicationEndpoint.SinkPeer</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.html#sinkServers">sinkServers</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>
@@ -114238,6 +114254,8 @@
 <div class="block">If replication is enabled and this cluster is a master,
  it starts</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#startReplicationService--">startReplicationService()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/client/Scan.html#startRow">startRow</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/filter/MultiRowRangeFilter.BasicRowRange.html#startRow">startRow</a></span> - Variable in class org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/MultiRowRangeFilter.BasicRowRange.html" title="class in org.apache.hadoop.hbase.filter">MultiRowRangeFilter.BasicRowRange</a></dt>
@@ -114562,7 +114580,9 @@
 <dd>
 <div class="block">Record separator for the Bloom filter statistics human-readable string</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#statsThreadPeriod">statsThreadPeriod</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html#statsPeriod">statsPeriod</a></span> - Variable in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#statsPeriod">statsPeriod</a></span> - Variable in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/io/hfile/TinyLfuBlockCache.html#statsThreadPool">statsThreadPool</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="org/apache/hadoop/hbase/io/hfile/TinyLfuBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile">TinyLfuBlockCache</a></dt>
 <dd>&nbsp;</dd>
@@ -115228,6 +115248,8 @@
 <dd>
 <div class="block">Stops replication service.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#stopReplicationService--">stopReplicationService()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html#stopReplicationSinkServices--">stopReplicationSinkServices()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></dt>
 <dd>
 <div class="block">stop the thread pool executor.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/HConstants.html b/devapidocs/org/apache/hadoop/hbase/HConstants.html
index 8adfd89..6c06133 100644
--- a/devapidocs/org/apache/hadoop/hbase/HConstants.html
+++ b/devapidocs/org/apache/hadoop/hbase/HConstants.html
@@ -1877,321 +1877,325 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME">REPLICATION_SINK_SERVICE_CLASSNAME</a></span></code>&nbsp;</td>
 </tr>
 <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/HConstants.html#REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</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/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_DEFAULT">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></span></code>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
 </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/HConstants.html#REPLICATION_SOURCE_MAXTHREADS_KEY">REPLICATION_SOURCE_MAXTHREADS_KEY</a></span></code>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#REPLICATION_SOURCE_SERVICE_CLASSNAME">REPLICATION_SOURCE_SERVICE_CLASSNAME</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/HConstants.html#REPLICATION_SOURCE_SHIPEDITS_TIMEOUT">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</a></span></code>
 <div class="block">Configuration key for ReplicationSource shipeEdits timeout</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT">REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#REPLICATION_SOURCE_TOTAL_BUFFER_KEY">REPLICATION_SOURCE_TOTAL_BUFFER_KEY</a></span></code>
 <div class="block">Max total size of buffered entries in all replication peers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static int[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#RETRY_BACKOFF">RETRY_BACKOFF</a></span></code>
 <div class="block">Retrying we multiply hbase.client.pause setting by what we have in this array until we
  run out of array items.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#RPC_CODEC_CONF_KEY">RPC_CODEC_CONF_KEY</a></span></code>
 <div class="block">Configuration key for setting RPC codec class name</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#RPC_CURRENT_VERSION">RPC_CURRENT_VERSION</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#RPC_HEADER">RPC_HEADER</a></span></code>
 <div class="block">The first four bytes of Hadoop RPC connections</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SEQNUM_QUALIFIER">SEQNUM_QUALIFIER</a></span></code>
 <div class="block">The open seqnum column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SEQNUM_QUALIFIER_STR">SEQNUM_QUALIFIER_STR</a></span></code>
 <div class="block">The open seqnum column qualifier</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SERVER_QUALIFIER">SERVER_QUALIFIER</a></span></code>
 <div class="block">The server column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SERVER_QUALIFIER_STR">SERVER_QUALIFIER_STR</a></span></code>
 <div class="block">The server column qualifier</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SERVERNAME_QUALIFIER">SERVERNAME_QUALIFIER</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SERVERNAME_QUALIFIER_STR">SERVERNAME_QUALIFIER_STR</a></span></code>
 <div class="block">The serverName column qualifier.</div>
 </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/HConstants.html#SLOW_LOG_BUFFER_ENABLED_KEY">SLOW_LOG_BUFFER_ENABLED_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SLOW_LOG_SYS_TABLE_ENABLED_KEY">SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SLOWLOG_INFO_FAMILY">SLOWLOG_INFO_FAMILY</a></span></code>
 <div class="block">The slowlog info family</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>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/HConstants.html#SLOWLOG_INFO_FAMILY_STR">SLOWLOG_INFO_FAMILY_STR</a></span></code>
 <div class="block">The slowlog info family as a string</div>
 </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/HConstants.html#SNAPSHOT_DIR_NAME">SNAPSHOT_DIR_NAME</a></span></code>
 <div class="block">Name of the directory to store all snapshots.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#SNAPSHOT_RESTORE_FAILSAFE_NAME">SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SOCKET_RETRY_WAIT_MS">SOCKET_RETRY_WAIT_MS</a></span></code>
 <div class="block">The delay when re-trying a socket operation in a loop (HBASE-4712)</div>
 </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/HConstants.html#SPLIT_LOGDIR_NAME">SPLIT_LOGDIR_NAME</a></span></code>
 <div class="block">Used to construct the name of the splitlog directory for a region server</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SPLITA_QUALIFIER">SPLITA_QUALIFIER</a></span></code>
 <div class="block">The lower-half split region column qualifier</div>
 </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/HConstants.html#SPLITA_QUALIFIER_STR">SPLITA_QUALIFIER_STR</a></span></code>
 <div class="block">The lower-half split region column qualifier string.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SPLITB_QUALIFIER">SPLITB_QUALIFIER</a></span></code>
 <div class="block">The upper-half split region column qualifier</div>
 </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/HConstants.html#SPLITB_QUALIFIER_STR">SPLITB_QUALIFIER_STR</a></span></code>
 <div class="block">The upper-half split region column qualifier String.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#STARTCODE_QUALIFIER">STARTCODE_QUALIFIER</a></span></code>
 <div class="block">The startcode column qualifier</div>
 </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/HConstants.html#STARTCODE_QUALIFIER_STR">STARTCODE_QUALIFIER_STR</a></span></code>
 <div class="block">The startcode column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#STATE_QUALIFIER">STATE_QUALIFIER</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/HConstants.html#STATE_QUALIFIER_STR">STATE_QUALIFIER_STR</a></span></code>
 <div class="block">The state column qualifier</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STATUS_MULTICAST_ADDRESS">STATUS_MULTICAST_ADDRESS</a></span></code>
 <div class="block">IP to use for the multicast status messages between the master and the clients.</div>
 </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/HConstants.html#STATUS_MULTICAST_BIND_ADDRESS">STATUS_MULTICAST_BIND_ADDRESS</a></span></code>
 <div class="block">The address to use for binding the local socket for receiving multicast.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STATUS_MULTICAST_NI_NAME">STATUS_MULTICAST_NI_NAME</a></span></code>
 <div class="block">The network interface name to use for the multicast messages.</div>
 </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/HConstants.html#STATUS_MULTICAST_PORT">STATUS_MULTICAST_PORT</a></span></code>
 <div class="block">The port to use for the multicast messages.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></span></code>
 <div class="block">The address to use for binding the local socket for sending multicast.</div>
 </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/HConstants.html#STATUS_PUBLISHED">STATUS_PUBLISHED</a></span></code>
 <div class="block">Setting to activate, or not, the publication of the status by the master.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#STATUS_PUBLISHED_DEFAULT">STATUS_PUBLISHED_DEFAULT</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/HConstants.html#STORAGE_POLICY_PREFIX">STORAGE_POLICY_PREFIX</a></span></code>
 <div class="block">Date Tiered Compaction tmp dir prefix name if use storage policy</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#STORE_FILE_REF_COUNT_THRESHOLD">STORE_FILE_REF_COUNT_THRESHOLD</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#SYSTEMTABLE_QOS">SYSTEMTABLE_QOS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#TABLE_FAMILY">TABLE_FAMILY</a></span></code>
 <div class="block">The catalog family</div>
 </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/HConstants.html#TABLE_FAMILY_STR">TABLE_FAMILY_STR</a></span></code>
 <div class="block">The catalog family as a string</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#TABLE_MAX_ROWSIZE_DEFAULT">TABLE_MAX_ROWSIZE_DEFAULT</a></span></code>
 <div class="block">Default max row size (1 Gb).</div>
 </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/HConstants.html#TABLE_MAX_ROWSIZE_KEY">TABLE_MAX_ROWSIZE_KEY</a></span></code>
 <div class="block">Max size of single row for Get's or Scan's without in-row scanning flag set.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static byte[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#TABLE_STATE_QUALIFIER">TABLE_STATE_QUALIFIER</a></span></code>
 <div class="block">The serialized table state qualifier</div>
 </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/HConstants.html#TEMPORARY_FS_DIRECTORY_KEY">TEMPORARY_FS_DIRECTORY_KEY</a></span></code>
 <div class="block">Config key for hbase temporary directory in hdfs</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#THREAD_WAKE_FREQUENCY">THREAD_WAKE_FREQUENCY</a></span></code>
 <div class="block">Parameter name for how often threads should wake up</div>
 </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/HConstants.html#USE_META_REPLICAS">USE_META_REPLICAS</a></span></code>
 <div class="block">Conf key for enabling meta replication</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html?is-external=true" title="class or interface in java.nio.charset">Charset</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#UTF8_CHARSET">UTF8_CHARSET</a></span></code>
 <div class="block">When we encode strings, we always specify UTF8 encoding</div>
 </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/HConstants.html#UTF8_ENCODING">UTF8_ENCODING</a></span></code>
 <div class="block">When we encode strings, we always specify UTF8 encoding</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#VERSION_FILE_NAME">VERSION_FILE_NAME</a></span></code>
 <div class="block">name of version file</div>
 </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/HConstants.html#VERSION_FILE_WRITE_ATTEMPTS">VERSION_FILE_WRITE_ATTEMPTS</a></span></code>
 <div class="block">Parameter name for how often we should try to write a version file, before failing</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#VERSIONS">VERSIONS</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/HConstants.html#WAL_STORAGE_POLICY">WAL_STORAGE_POLICY</a></span></code>
 <div class="block">Configuration name of WAL storage policy
@@ -2199,98 +2203,98 @@
  See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <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></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#ZERO_L">ZERO_L</a></span></code>
 <div class="block">long constant for zero</div>
 </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/HConstants.html#ZEROES">ZEROES</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZK_CFG_PROPERTY_PREFIX">ZK_CFG_PROPERTY_PREFIX</a></span></code>
 <div class="block">Common prefix of ZooKeeper configuration properties</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#ZK_CFG_PROPERTY_PREFIX_LEN">ZK_CFG_PROPERTY_PREFIX_LEN</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZK_CLIENT_KERBEROS_PRINCIPAL">ZK_CLIENT_KERBEROS_PRINCIPAL</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/HConstants.html#ZK_CLIENT_KEYTAB_FILE">ZK_CLIENT_KEYTAB_FILE</a></span></code>
 <div class="block">Configuration keys for programmatic JAAS configuration for secured ZK interaction</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZK_CONNECTION_REGISTRY_CLASS">ZK_CONNECTION_REGISTRY_CLASS</a></span></code>
 <div class="block">Full class name of the Zookeeper based connection registry implementation</div>
 </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/HConstants.html#ZK_SERVER_KERBEROS_PRINCIPAL">ZK_SERVER_KERBEROS_PRINCIPAL</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZK_SERVER_KEYTAB_FILE">ZK_SERVER_KEYTAB_FILE</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/HConstants.html#ZK_SESSION_TIMEOUT">ZK_SESSION_TIMEOUT</a></span></code>
 <div class="block">Configuration key for ZooKeeper session timeout</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/HConstants.html#ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS">ZK_SYNC_BLOCKING_TIMEOUT_DEFAULT_MS</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/HConstants.html#ZK_SYNC_BLOCKING_TIMEOUT_MS">ZK_SYNC_BLOCKING_TIMEOUT_MS</a></span></code>
 <div class="block">Timeout for the ZK sync() call</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZOOKEEPER_CLIENT_PORT">ZOOKEEPER_CLIENT_PORT</a></span></code>
 <div class="block">Parameter name for the client port that the zookeeper listens on</div>
 </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/HConstants.html#ZOOKEEPER_DATA_DIR">ZOOKEEPER_DATA_DIR</a></span></code>
 <div class="block">Parameter name for the ZK data directory</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZOOKEEPER_MAX_CLIENT_CNXNS">ZOOKEEPER_MAX_CLIENT_CNXNS</a></span></code>
 <div class="block">Parameter name for the limit on concurrent client-side zookeeper
  connections</div>
 </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/HConstants.html#ZOOKEEPER_QUORUM">ZOOKEEPER_QUORUM</a></span></code>
 <div class="block">Name of ZooKeeper quorum configuration parameter.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr 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/HConstants.html#ZOOKEEPER_TICK_TIME">ZOOKEEPER_TICK_TIME</a></span></code>
 <div class="block">Parameter name for the ZK tick time</div>
 </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/HConstants.html#ZOOKEEPER_ZNODE_PARENT">ZOOKEEPER_ZNODE_PARENT</a></span></code>
 <div class="block">Parameter name for the root dir in ZK for this cluster</div>
@@ -5240,39 +5244,52 @@
 </dl>
 </li>
 </ul>
-<a name="REPLICATION_SINK_SERVICE_CLASSNAME">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>REPLICATION_SINK_SERVICE_CLASSNAME</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/HConstants.html#line.985">REPLICATION_SINK_SERVICE_CLASSNAME</a></pre>
-<dl>
-<dt><span class="seeLabel">See Also:</span></dt>
-<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SINK_SERVICE_CLASSNAME">Constant Field Values</a></dd>
-</dl>
-</li>
-</ul>
 <a name="REPLICATION_SERVICE_CLASSNAME_DEFAULT">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SERVICE_CLASSNAME_DEFAULT</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/HConstants.html#line.986">REPLICATION_SERVICE_CLASSNAME_DEFAULT</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/HConstants.html#line.984">REPLICATION_SERVICE_CLASSNAME_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT">Constant Field Values</a></dd>
 </dl>
 </li>
 </ul>
+<a name="REPLICATION_SINK_SERVICE_CLASSNAME">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>REPLICATION_SINK_SERVICE_CLASSNAME</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/HConstants.html#line.987">REPLICATION_SINK_SERVICE_CLASSNAME</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SINK_SERVICE_CLASSNAME">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
+<a name="REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</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/HConstants.html#line.988">REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT</a></pre>
+<dl>
+<dt><span class="seeLabel">See Also:</span></dt>
+<dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT">Constant Field Values</a></dd>
+</dl>
+</li>
+</ul>
 <a name="REPLICATION_BULKLOAD_ENABLE_KEY">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_BULKLOAD_ENABLE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.988">REPLICATION_BULKLOAD_ENABLE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.990">REPLICATION_BULKLOAD_ENABLE_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_BULKLOAD_ENABLE_KEY">Constant Field Values</a></dd>
@@ -5285,7 +5302,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_BULKLOAD_ENABLE_DEFAULT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.989">REPLICATION_BULKLOAD_ENABLE_DEFAULT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.991">REPLICATION_BULKLOAD_ENABLE_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_BULKLOAD_ENABLE_DEFAULT">Constant Field Values</a></dd>
@@ -5298,7 +5315,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_CLUSTER_ID</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/HConstants.html#line.991">REPLICATION_CLUSTER_ID</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/HConstants.html#line.993">REPLICATION_CLUSTER_ID</a></pre>
 <div class="block">Replication cluster id of source cluster which uniquely identifies itself with peer cluster</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5312,7 +5329,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_TOTAL_BUFFER_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.997">REPLICATION_SOURCE_TOTAL_BUFFER_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.999">REPLICATION_SOURCE_TOTAL_BUFFER_KEY</a></pre>
 <div class="block">Max total size of buffered entries in all replication peers. It will prevent server getting
  OOM if there are many peers. Default value is 256MB which is four times to default
  replication.source.size.capacity.</div>
@@ -5328,7 +5345,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.999">REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1001">REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT">Constant Field Values</a></dd>
@@ -5341,7 +5358,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</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/HConstants.html#line.1002">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</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/HConstants.html#line.1004">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT</a></pre>
 <div class="block">Configuration key for ReplicationSource shipeEdits timeout</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5355,7 +5372,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1004">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1006">REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT">Constant Field Values</a></dd>
@@ -5368,7 +5385,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_CONF_DIR</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/HConstants.html#line.1010">REPLICATION_CONF_DIR</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/HConstants.html#line.1012">REPLICATION_CONF_DIR</a></pre>
 <div class="block">Directory where the source cluster file system client configuration are placed which is used by
  sink cluster to copy HFiles from source cluster file system</div>
 <dl>
@@ -5383,7 +5400,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BULKLOAD_MAX_RETRIES_NUMBER</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/HConstants.html#line.1013">BULKLOAD_MAX_RETRIES_NUMBER</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/HConstants.html#line.1015">BULKLOAD_MAX_RETRIES_NUMBER</a></pre>
 <div class="block">Maximum time to retry for a failed bulk load request</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5397,7 +5414,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>KEY_FOR_HOSTNAME_SEEN_BY_MASTER</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/HConstants.html#line.1015">KEY_FOR_HOSTNAME_SEEN_BY_MASTER</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/HConstants.html#line.1017">KEY_FOR_HOSTNAME_SEEN_BY_MASTER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER">Constant Field Values</a></dd>
@@ -5410,7 +5427,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_MASTER_LOGCLEANER_PLUGINS</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/HConstants.html#line.1018">HBASE_MASTER_LOGCLEANER_PLUGINS</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/HConstants.html#line.1020">HBASE_MASTER_LOGCLEANER_PLUGINS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_MASTER_LOGCLEANER_PLUGINS">Constant Field Values</a></dd>
@@ -5423,7 +5440,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_REGION_SPLIT_POLICY_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1021">HBASE_REGION_SPLIT_POLICY_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1023">HBASE_REGION_SPLIT_POLICY_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_REGION_SPLIT_POLICY_KEY">Constant Field Values</a></dd>
@@ -5436,7 +5453,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_RS_NONCES_ENABLED</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/HConstants.html#line.1025">HBASE_RS_NONCES_ENABLED</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/HConstants.html#line.1027">HBASE_RS_NONCES_ENABLED</a></pre>
 <div class="block">Whether nonces are enabled; default is true.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5450,7 +5467,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HFILE_BLOCK_CACHE_SIZE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1030">HFILE_BLOCK_CACHE_SIZE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1032">HFILE_BLOCK_CACHE_SIZE_KEY</a></pre>
 <div class="block">Configuration key for the size of the block cache</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5464,7 +5481,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HFILE_BLOCK_CACHE_SIZE_DEFAULT</h4>
-<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1033">HFILE_BLOCK_CACHE_SIZE_DEFAULT</a></pre>
+<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1035">HFILE_BLOCK_CACHE_SIZE_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HFILE_BLOCK_CACHE_SIZE_DEFAULT">Constant Field Values</a></dd>
@@ -5477,7 +5494,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD</h4>
-<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1038">HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD</a></pre>
+<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1040">HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD">Constant Field Values</a></dd>
@@ -5491,7 +5508,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_KEY_PATTERN</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 final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1044">CP_HTD_ATTR_KEY_PATTERN</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1046">CP_HTD_ATTR_KEY_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </li>
 </ul>
@@ -5502,7 +5519,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PATTERN</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 final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1057">CP_HTD_ATTR_VALUE_PATTERN</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1059">CP_HTD_ATTR_VALUE_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 <div class="block"><pre>
  Pattern that matches a coprocessor specification. Form is:
@@ -5519,7 +5536,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</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 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/HConstants.html#line.1063">CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</a></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/HConstants.html#line.1065">CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5534,7 +5551,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</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 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/HConstants.html#line.1068">CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</a></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/HConstants.html#line.1070">CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5549,7 +5566,7 @@
 <li class="blockList">
 <h4>CP_HTD_ATTR_VALUE_PARAM_PATTERN</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 final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1073">CP_HTD_ATTR_VALUE_PARAM_PATTERN</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html?is-external=true" title="class or interface in java.util.regex">Pattern</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1075">CP_HTD_ATTR_VALUE_PARAM_PATTERN</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.</span></div>
 </li>
 </ul>
@@ -5559,7 +5576,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CP_HTD_ATTR_INCLUSION_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1076">CP_HTD_ATTR_INCLUSION_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1078">CP_HTD_ATTR_INCLUSION_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.CP_HTD_ATTR_INCLUSION_KEY">Constant Field Values</a></dd>
@@ -5572,7 +5589,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SOCKET_RETRY_WAIT_MS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1080">SOCKET_RETRY_WAIT_MS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1082">SOCKET_RETRY_WAIT_MS</a></pre>
 <div class="block">The delay when re-trying a socket operation in a loop (HBASE-4712)</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5586,7 +5603,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOCALHOST</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/HConstants.html#line.1083">LOCALHOST</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/HConstants.html#line.1085">LOCALHOST</a></pre>
 <div class="block">Host name of the local machine</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5600,7 +5617,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CHECKSUM_VERIFICATION</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/HConstants.html#line.1096">HBASE_CHECKSUM_VERIFICATION</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/HConstants.html#line.1098">HBASE_CHECKSUM_VERIFICATION</a></pre>
 <div class="block">If this parameter is set to true, then hbase will read
  data and then verify checksums. Checksum verification
  inside hdfs will be switched off.  However, if the hbase-checksum
@@ -5622,7 +5639,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOCALHOST_IP</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/HConstants.html#line.1099">LOCALHOST_IP</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/HConstants.html#line.1101">LOCALHOST_IP</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.LOCALHOST_IP">Constant Field Values</a></dd>
@@ -5635,7 +5652,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_HANDLER_COUNT</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/HConstants.html#line.1101">REGION_SERVER_HANDLER_COUNT</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/HConstants.html#line.1103">REGION_SERVER_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGION_SERVER_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5648,7 +5665,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_HANDLER_COUNT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1102">DEFAULT_REGION_SERVER_HANDLER_COUNT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1104">DEFAULT_REGION_SERVER_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGION_SERVER_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5661,7 +5678,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</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/HConstants.html#line.1111">REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</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/HConstants.html#line.1113">REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT">Constant Field Values</a></dd>
@@ -5674,7 +5691,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</h4>
-<pre>public static final&nbsp;double <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1113">DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</a></pre>
+<pre>public static final&nbsp;double <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1115">DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT">Constant Field Values</a></dd>
@@ -5687,7 +5704,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</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/HConstants.html#line.1116">REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</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/HConstants.html#line.1118">REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5700,7 +5717,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1118">DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1120">DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5713,7 +5730,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SERVER_REPLICATION_HANDLER_COUNT</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/HConstants.html#line.1120">REGION_SERVER_REPLICATION_HANDLER_COUNT</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/HConstants.html#line.1122">REGION_SERVER_REPLICATION_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGION_SERVER_REPLICATION_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5726,7 +5743,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1122">DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1124">DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5739,7 +5756,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_META_TRANSITION_HANDLER_COUNT</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/HConstants.html#line.1125">MASTER_META_TRANSITION_HANDLER_COUNT</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/HConstants.html#line.1127">MASTER_META_TRANSITION_HANDLER_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_META_TRANSITION_HANDLER_COUNT">Constant Field Values</a></dd>
@@ -5752,7 +5769,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1127">MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1129">MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT">Constant Field Values</a></dd>
@@ -5765,7 +5782,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>USE_META_REPLICAS</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/HConstants.html#line.1130">USE_META_REPLICAS</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/HConstants.html#line.1132">USE_META_REPLICAS</a></pre>
 <div class="block">Conf key for enabling meta replication</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5779,7 +5796,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_USE_META_REPLICAS</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1131">DEFAULT_USE_META_REPLICAS</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1133">DEFAULT_USE_META_REPLICAS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_USE_META_REPLICAS">Constant Field Values</a></dd>
@@ -5792,7 +5809,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>META_REPLICAS_NUM</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/HConstants.html#line.1132">META_REPLICAS_NUM</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/HConstants.html#line.1134">META_REPLICAS_NUM</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.META_REPLICAS_NUM">Constant Field Values</a></dd>
@@ -5805,7 +5822,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_META_REPLICA_NUM</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1133">DEFAULT_META_REPLICA_NUM</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1135">DEFAULT_META_REPLICA_NUM</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_META_REPLICA_NUM">Constant Field Values</a></dd>
@@ -5818,7 +5835,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BYTES_PER_CHECKSUM</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/HConstants.html#line.1139">BYTES_PER_CHECKSUM</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/HConstants.html#line.1141">BYTES_PER_CHECKSUM</a></pre>
 <div class="block">The name of the configuration parameter that specifies
  the number of bytes in a newly created checksum chunk.</div>
 <dl>
@@ -5833,7 +5850,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CHECKSUM_TYPE_NAME</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/HConstants.html#line.1147">CHECKSUM_TYPE_NAME</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/HConstants.html#line.1149">CHECKSUM_TYPE_NAME</a></pre>
 <div class="block">The name of the configuration parameter that specifies
  the name of an algorithm that is used to compute checksums
  for newly created blocks.</div>
@@ -5849,7 +5866,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ENABLE_DATA_FILE_UMASK</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/HConstants.html#line.1151">ENABLE_DATA_FILE_UMASK</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/HConstants.html#line.1153">ENABLE_DATA_FILE_UMASK</a></pre>
 <div class="block">Enable file permission modification from standard hbase</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5863,7 +5880,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DATA_FILE_UMASK_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1153">DATA_FILE_UMASK_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1155">DATA_FILE_UMASK_KEY</a></pre>
 <div class="block">File permission umask to use when creating hbase data files</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5877,7 +5894,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ENABLE_WAL_COMPRESSION</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/HConstants.html#line.1156">ENABLE_WAL_COMPRESSION</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/HConstants.html#line.1158">ENABLE_WAL_COMPRESSION</a></pre>
 <div class="block">Configuration name of WAL Compression</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5891,7 +5908,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>WAL_STORAGE_POLICY</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/HConstants.html#line.1162">WAL_STORAGE_POLICY</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/HConstants.html#line.1164">WAL_STORAGE_POLICY</a></pre>
 <div class="block">Configuration name of WAL storage policy
  Valid values are: HOT, COLD, WARM, ALL_SSD, ONE_SSD, LAZY_PERSIST
  See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html</div>
@@ -5907,7 +5924,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFER_TO_HDFS_STORAGE_POLICY</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/HConstants.html#line.1167">DEFER_TO_HDFS_STORAGE_POLICY</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/HConstants.html#line.1169">DEFER_TO_HDFS_STORAGE_POLICY</a></pre>
 <div class="block">"NONE" is not a valid storage policy and means we defer the policy to HDFS. @see
  <a href="https://issues.apache.org/jira/browse/HBASE-20691">HBASE-20691</a></div>
 <dl>
@@ -5922,7 +5939,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WAL_STORAGE_POLICY</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/HConstants.html#line.1169">DEFAULT_WAL_STORAGE_POLICY</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/HConstants.html#line.1171">DEFAULT_WAL_STORAGE_POLICY</a></pre>
 <div class="block">By default we defer the WAL storage policy to HDFS</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5936,7 +5953,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>METRICS_RIT_STUCK_WARNING_THRESHOLD</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/HConstants.html#line.1172">METRICS_RIT_STUCK_WARNING_THRESHOLD</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/HConstants.html#line.1174">METRICS_RIT_STUCK_WARNING_THRESHOLD</a></pre>
 <div class="block">Region in Transition metrics threshold time</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5950,7 +5967,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOAD_BALANCER_SLOP_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1175">LOAD_BALANCER_SLOP_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1177">LOAD_BALANCER_SLOP_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.LOAD_BALANCER_SLOP_KEY">Constant Field Values</a></dd>
@@ -5963,7 +5980,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DELIMITER</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1178">DELIMITER</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1180">DELIMITER</a></pre>
 <div class="block">delimiter used between portions of a region name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -5977,7 +5994,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>PRIORITY_UNSET</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1186">PRIORITY_UNSET</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1188">PRIORITY_UNSET</a></pre>
 <div class="block">QOS attributes: these attributes are used to demarcate RPC call processing
  by different set of handlers. For example, HIGH_QOS tagged methods are
  handled by high priority handlers.</div>
@@ -5993,7 +6010,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>NORMAL_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1187">NORMAL_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1189">NORMAL_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.NORMAL_QOS">Constant Field Values</a></dd>
@@ -6006,7 +6023,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1188">REPLICATION_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1190">REPLICATION_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLICATION_QOS">Constant Field Values</a></dd>
@@ -6019,7 +6036,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLAY_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1189">REPLAY_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1191">REPLAY_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REPLAY_QOS">Constant Field Values</a></dd>
@@ -6032,7 +6049,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>QOS_THRESHOLD</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1190">QOS_THRESHOLD</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1192">QOS_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.QOS_THRESHOLD">Constant Field Values</a></dd>
@@ -6045,7 +6062,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ADMIN_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1191">ADMIN_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1193">ADMIN_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.ADMIN_QOS">Constant Field Values</a></dd>
@@ -6058,7 +6075,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HIGH_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1192">HIGH_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1194">HIGH_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HIGH_QOS">Constant Field Values</a></dd>
@@ -6071,7 +6088,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SYSTEMTABLE_QOS</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1193">SYSTEMTABLE_QOS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1195">SYSTEMTABLE_QOS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SYSTEMTABLE_QOS">Constant Field Values</a></dd>
@@ -6085,7 +6102,7 @@
 <li class="blockList">
 <h4>META_QOS</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 final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1199">META_QOS</a></pre>
+public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1201">META_QOS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">the name "META_QOS" is a bit ambiguous, actually only meta region transition can
              use this priority, and you should not use this directly. Will be removed in 3.0.0.</span></div>
 <dl>
@@ -6100,7 +6117,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HFILE_ARCHIVE_DIRECTORY</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/HConstants.html#line.1202">HFILE_ARCHIVE_DIRECTORY</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/HConstants.html#line.1204">HFILE_ARCHIVE_DIRECTORY</a></pre>
 <div class="block">Directory under /hbase where archived hfiles are stored</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6114,7 +6131,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_DIR_NAME</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/HConstants.html#line.1209">SNAPSHOT_DIR_NAME</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/HConstants.html#line.1211">SNAPSHOT_DIR_NAME</a></pre>
 <div class="block">Name of the directory to store all snapshots. See SnapshotDescriptionUtils for
  remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and
  uni-directional.</div>
@@ -6130,7 +6147,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>OLD_SNAPSHOT_DIR_NAME</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/HConstants.html#line.1212">OLD_SNAPSHOT_DIR_NAME</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/HConstants.html#line.1214">OLD_SNAPSHOT_DIR_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.OLD_SNAPSHOT_DIR_NAME">Constant Field Values</a></dd>
@@ -6143,7 +6160,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_TEMP_DIRECTORY</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/HConstants.html#line.1215">HBASE_TEMP_DIRECTORY</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/HConstants.html#line.1217">HBASE_TEMP_DIRECTORY</a></pre>
 <div class="block">Temporary directory used for table creation and deletion</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6157,7 +6174,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONSERVER_METRICS_PERIOD</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/HConstants.html#line.1219">REGIONSERVER_METRICS_PERIOD</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/HConstants.html#line.1221">REGIONSERVER_METRICS_PERIOD</a></pre>
 <div class="block">The period (in milliseconds) between computing region server point in time metrics</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6171,7 +6188,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGIONSERVER_METRICS_PERIOD</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1220">DEFAULT_REGIONSERVER_METRICS_PERIOD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1222">DEFAULT_REGIONSERVER_METRICS_PERIOD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGIONSERVER_METRICS_PERIOD">Constant Field Values</a></dd>
@@ -6184,7 +6201,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_NON_TABLE_DIRS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1222">HBASE_NON_TABLE_DIRS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1224">HBASE_NON_TABLE_DIRS</a></pre>
 <div class="block">Directories that are not HBase table directories</div>
 </li>
 </ul>
@@ -6195,7 +6212,7 @@
 <li class="blockList">
 <h4>HBASE_NON_USER_TABLE_DIRS</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 final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1232">HBASE_NON_USER_TABLE_DIRS</a></pre>
+public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1234">HBASE_NON_USER_TABLE_DIRS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Since hbase-2.3.0; no replacement as not used any more (internally at least)</span></div>
 <div class="block">Directories that are not HBase user table directories.</div>
 </li>
@@ -6206,7 +6223,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEALTH_SCRIPT_LOC</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/HConstants.html#line.1238">HEALTH_SCRIPT_LOC</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/HConstants.html#line.1240">HEALTH_SCRIPT_LOC</a></pre>
 <div class="block">Health script related settings.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6220,7 +6237,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEALTH_SCRIPT_TIMEOUT</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/HConstants.html#line.1239">HEALTH_SCRIPT_TIMEOUT</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/HConstants.html#line.1241">HEALTH_SCRIPT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HEALTH_SCRIPT_TIMEOUT">Constant Field Values</a></dd>
@@ -6233,7 +6250,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEALTH_CHORE_WAKE_FREQ</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/HConstants.html#line.1240">HEALTH_CHORE_WAKE_FREQ</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/HConstants.html#line.1242">HEALTH_CHORE_WAKE_FREQ</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HEALTH_CHORE_WAKE_FREQ">Constant Field Values</a></dd>
@@ -6246,7 +6263,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HEALTH_SCRIPT_TIMEOUT</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1242">DEFAULT_HEALTH_SCRIPT_TIMEOUT</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1244">DEFAULT_HEALTH_SCRIPT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HEALTH_SCRIPT_TIMEOUT">Constant Field Values</a></dd>
@@ -6259,7 +6276,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEALTH_FAILURE_THRESHOLD</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/HConstants.html#line.1246">HEALTH_FAILURE_THRESHOLD</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/HConstants.html#line.1248">HEALTH_FAILURE_THRESHOLD</a></pre>
 <div class="block">The maximum number of health check failures a server can encounter consecutively.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6273,7 +6290,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HEALTH_FAILURE_THRESHOLD</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1248">DEFAULT_HEALTH_FAILURE_THRESHOLD</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1250">DEFAULT_HEALTH_FAILURE_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HEALTH_FAILURE_THRESHOLD">Constant Field Values</a></dd>
@@ -6286,7 +6303,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>EXECUTOR_STATUS_COLLECT_ENABLED</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/HConstants.html#line.1250">EXECUTOR_STATUS_COLLECT_ENABLED</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/HConstants.html#line.1252">EXECUTOR_STATUS_COLLECT_ENABLED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.EXECUTOR_STATUS_COLLECT_ENABLED">Constant Field Values</a></dd>
@@ -6299,7 +6316,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1252">DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1254">DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED">Constant Field Values</a></dd>
@@ -6312,7 +6329,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_PUBLISHED</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/HConstants.html#line.1258">STATUS_PUBLISHED</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/HConstants.html#line.1260">STATUS_PUBLISHED</a></pre>
 <div class="block">Setting to activate, or not, the publication of the status by the master. Default
   notification is by a multicast message.</div>
 <dl>
@@ -6327,7 +6344,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_PUBLISHED_DEFAULT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1259">STATUS_PUBLISHED_DEFAULT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1261">STATUS_PUBLISHED_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.STATUS_PUBLISHED_DEFAULT">Constant Field Values</a></dd>
@@ -6340,7 +6357,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_ADDRESS</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/HConstants.html#line.1266">STATUS_MULTICAST_ADDRESS</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/HConstants.html#line.1268">STATUS_MULTICAST_ADDRESS</a></pre>
 <div class="block">IP to use for the multicast status messages between the master and the clients.
  The default address is chosen as one among others within the ones suitable for multicast
  messages.</div>
@@ -6356,7 +6373,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATUS_MULTICAST_ADDRESS</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/HConstants.html#line.1267">DEFAULT_STATUS_MULTICAST_ADDRESS</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/HConstants.html#line.1269">DEFAULT_STATUS_MULTICAST_ADDRESS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STATUS_MULTICAST_ADDRESS">Constant Field Values</a></dd>
@@ -6369,7 +6386,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_BIND_ADDRESS</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/HConstants.html#line.1274">STATUS_MULTICAST_BIND_ADDRESS</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/HConstants.html#line.1276">STATUS_MULTICAST_BIND_ADDRESS</a></pre>
 <div class="block">The address to use for binding the local socket for receiving multicast. Defaults to
  0.0.0.0.</div>
 <dl>
@@ -6385,7 +6402,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATUS_MULTICAST_BIND_ADDRESS</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/HConstants.html#line.1276">DEFAULT_STATUS_MULTICAST_BIND_ADDRESS</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/HConstants.html#line.1278">DEFAULT_STATUS_MULTICAST_BIND_ADDRESS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STATUS_MULTICAST_BIND_ADDRESS">Constant Field Values</a></dd>
@@ -6398,7 +6415,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_PORT</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/HConstants.html#line.1281">STATUS_MULTICAST_PORT</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/HConstants.html#line.1283">STATUS_MULTICAST_PORT</a></pre>
 <div class="block">The port to use for the multicast messages.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6412,7 +6429,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATUS_MULTICAST_PORT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1282">DEFAULT_STATUS_MULTICAST_PORT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1284">DEFAULT_STATUS_MULTICAST_PORT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STATUS_MULTICAST_PORT">Constant Field Values</a></dd>
@@ -6425,7 +6442,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_NI_NAME</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/HConstants.html#line.1287">STATUS_MULTICAST_NI_NAME</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/HConstants.html#line.1289">STATUS_MULTICAST_NI_NAME</a></pre>
 <div class="block">The network interface name to use for the multicast messages.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6439,7 +6456,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</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/HConstants.html#line.1292">STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</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/HConstants.html#line.1294">STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></pre>
 <div class="block">The address to use for binding the local socket for sending multicast. Defaults to 0.0.0.0.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6453,7 +6470,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</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/HConstants.html#line.1294">DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</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/HConstants.html#line.1296">DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS">Constant Field Values</a></dd>
@@ -6466,7 +6483,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_NONCE</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1296">NO_NONCE</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1298">NO_NONCE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.NO_NONCE">Constant Field Values</a></dd>
@@ -6479,7 +6496,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CIPHER_AES</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/HConstants.html#line.1299">CIPHER_AES</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/HConstants.html#line.1301">CIPHER_AES</a></pre>
 <div class="block">Default cipher for encryption</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6493,7 +6510,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_CIPHERPROVIDER_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1302">CRYPTO_CIPHERPROVIDER_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1304">CRYPTO_CIPHERPROVIDER_CONF_KEY</a></pre>
 <div class="block">Configuration key for the crypto algorithm provider, a class name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6507,7 +6524,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_KEYPROVIDER_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1305">CRYPTO_KEYPROVIDER_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1307">CRYPTO_KEYPROVIDER_CONF_KEY</a></pre>
 <div class="block">Configuration key for the crypto key provider, a class name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6521,7 +6538,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_KEYPROVIDER_PARAMETERS_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1308">CRYPTO_KEYPROVIDER_PARAMETERS_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1310">CRYPTO_KEYPROVIDER_PARAMETERS_KEY</a></pre>
 <div class="block">Configuration key for the crypto key provider parameters</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6535,7 +6552,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_MASTERKEY_NAME_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1312">CRYPTO_MASTERKEY_NAME_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1314">CRYPTO_MASTERKEY_NAME_CONF_KEY</a></pre>
 <div class="block">Configuration key for the name of the master key for the cluster, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6549,7 +6566,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1315">CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1317">CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY</a></pre>
 <div class="block">Configuration key for the name of the alternate master key for the cluster, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6563,7 +6580,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_WAL_ALGORITHM_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1319">CRYPTO_WAL_ALGORITHM_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1321">CRYPTO_WAL_ALGORITHM_CONF_KEY</a></pre>
 <div class="block">Configuration key for the algorithm to use when encrypting the WAL, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6577,7 +6594,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_WAL_KEY_NAME_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1322">CRYPTO_WAL_KEY_NAME_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1324">CRYPTO_WAL_KEY_NAME_CONF_KEY</a></pre>
 <div class="block">Configuration key for the name of the master WAL encryption key for the cluster, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6591,7 +6608,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_KEY_ALGORITHM_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1325">CRYPTO_KEY_ALGORITHM_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1327">CRYPTO_KEY_ALGORITHM_CONF_KEY</a></pre>
 <div class="block">Configuration key for the algorithm used for creating jks key, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6605,7 +6622,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1328">CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1330">CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY</a></pre>
 <div class="block">Configuration key for the name of the alternate cipher algorithm for the cluster, a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6619,7 +6636,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ENABLE_WAL_ENCRYPTION</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/HConstants.html#line.1332">ENABLE_WAL_ENCRYPTION</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/HConstants.html#line.1334">ENABLE_WAL_ENCRYPTION</a></pre>
 <div class="block">Configuration key for enabling WAL encryption, a boolean</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6633,7 +6650,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>RPC_CODEC_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1335">RPC_CODEC_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1337">RPC_CODEC_CONF_KEY</a></pre>
 <div class="block">Configuration key for setting RPC codec class name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6647,7 +6664,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_CODEC_CONF_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1338">REPLICATION_CODEC_CONF_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1340">REPLICATION_CODEC_CONF_KEY</a></pre>
 <div class="block">Configuration key for setting replication codec class name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6661,7 +6678,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_MAXTHREADS_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1341">REPLICATION_SOURCE_MAXTHREADS_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1343">REPLICATION_SOURCE_MAXTHREADS_KEY</a></pre>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6676,7 +6693,7 @@
 <li class="blockList">
 <h4>REPLICATION_DROP_ON_DELETED_TABLE_KEY</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-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/HConstants.html#line.1349">REPLICATION_DROP_ON_DELETED_TABLE_KEY</a></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/HConstants.html#line.1351">REPLICATION_DROP_ON_DELETED_TABLE_KEY</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">moved it into HBaseInterClusterReplicationEndpoint</span></div>
 <div class="block">Drop edits for tables that been deleted from the replication source and target</div>
 <dl>
@@ -6691,7 +6708,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REPLICATION_SOURCE_MAXTHREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1353">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1355">REPLICATION_SOURCE_MAXTHREADS_DEFAULT</a></pre>
 <div class="block">Maximum number of threads used by the replication source for shipping edits to the sinks</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6705,7 +6722,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SPLITLOG_MANAGER_TIMEOUT</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/HConstants.html#line.1356">HBASE_SPLITLOG_MANAGER_TIMEOUT</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/HConstants.html#line.1358">HBASE_SPLITLOG_MANAGER_TIMEOUT</a></pre>
 <div class="block">Configuration key for SplitLog manager timeout</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6719,7 +6736,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BUCKET_CACHE_IOENGINE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1372">BUCKET_CACHE_IOENGINE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1374">BUCKET_CACHE_IOENGINE_KEY</a></pre>
 <div class="block">Current ioengine options in include: heap, offheap and file:PATH (where PATH is the path
  to the file that will host the file-based cache.  See BucketCache#getIOEngineFromName() for
  list of supported ioengine options.
@@ -6736,7 +6753,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BUCKET_CACHE_SIZE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1379">BUCKET_CACHE_SIZE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1381">BUCKET_CACHE_SIZE_KEY</a></pre>
 <div class="block">When using bucket cache, this is a float that EITHER represents a percentage of total heap
  memory size to give to the cache (if &lt; 1.0) OR, it is the capacity in
  megabytes of the cache.</div>
@@ -6753,7 +6770,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_MODE_ENABLED</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 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/HConstants.html#line.1390">HBASE_CLIENT_FAST_FAIL_MODE_ENABLED</a></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/HConstants.html#line.1392">HBASE_CLIENT_FAST_FAIL_MODE_ENABLED</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <div class="block">Config for enabling/disabling the fast fail mode.</div>
@@ -6770,7 +6787,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT</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 final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1398">HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT</a></pre>
+public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1400">HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6786,7 +6803,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS</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 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/HConstants.html#line.1405">HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS</a></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/HConstants.html#line.1407">HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6802,7 +6819,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT</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 final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1413">HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT</a></pre>
+public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1415">HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6818,7 +6835,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS</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 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/HConstants.html#line.1420">HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS</a></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/HConstants.html#line.1422">HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6834,7 +6851,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT</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 final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1428">HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT</a></pre>
+public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1430">HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6850,7 +6867,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS</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 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/HConstants.html#line.1435">HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS</a></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/HConstants.html#line.1437">HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6866,7 +6883,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT</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 final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1443">HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT</a></pre>
+public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1445">HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6882,7 +6899,7 @@
 <li class="blockList">
 <h4>HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL</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 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/HConstants.html#line.1450">HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL</a></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/HConstants.html#line.1452">HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.3.0, and in 3.0.0 the actually implementation will be removed so config
              this value will have no effect. The constants itself will be removed in 4.0.0.</span></div>
 <dl>
@@ -6898,7 +6915,7 @@
 <li class="blockList">
 <h4>HBASE_SPLIT_WAL_COORDINATED_BY_ZK</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 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/HConstants.html#line.1458">HBASE_SPLIT_WAL_COORDINATED_BY_ZK</a></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/HConstants.html#line.1460">HBASE_SPLIT_WAL_COORDINATED_BY_ZK</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and in 3.0.0, to be removed in 4.0.0, replaced by procedure-based
    distributed WAL splitter; see SplitWALManager.</span></div>
 <dl>
@@ -6914,7 +6931,7 @@
 <li class="blockList">
 <h4>DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK</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 final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1464">DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK</a></pre>
+public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1466">DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK</a></pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">since 2.4.0 and in 3.0.0, to be removed in 4.0.0.</span></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -6928,7 +6945,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_SPLIT_WAL_MAX_SPLITTER</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/HConstants.html#line.1466">HBASE_SPLIT_WAL_MAX_SPLITTER</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/HConstants.html#line.1468">HBASE_SPLIT_WAL_MAX_SPLITTER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_SPLIT_WAL_MAX_SPLITTER">Constant Field Values</a></dd>
@@ -6941,7 +6958,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1468">DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1470">DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER">Constant Field Values</a></dd>
@@ -6954,7 +6971,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ENABLE_CLIENT_BACKPRESSURE</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/HConstants.html#line.1472">ENABLE_CLIENT_BACKPRESSURE</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/HConstants.html#line.1474">ENABLE_CLIENT_BACKPRESSURE</a></pre>
 <div class="block">Config key for if the server should send backpressure and if the client should listen to
  that backpressure from the server</div>
 <dl>
@@ -6969,7 +6986,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ENABLE_CLIENT_BACKPRESSURE</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1473">DEFAULT_ENABLE_CLIENT_BACKPRESSURE</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1475">DEFAULT_ENABLE_CLIENT_BACKPRESSURE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_ENABLE_CLIENT_BACKPRESSURE">Constant Field Values</a></dd>
@@ -6982,7 +6999,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEAP_OCCUPANCY_LOW_WATERMARK_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1475">HEAP_OCCUPANCY_LOW_WATERMARK_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1477">HEAP_OCCUPANCY_LOW_WATERMARK_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HEAP_OCCUPANCY_LOW_WATERMARK_KEY">Constant Field Values</a></dd>
@@ -6995,7 +7012,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK</h4>
-<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1477">DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK</a></pre>
+<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1479">DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK">Constant Field Values</a></dd>
@@ -7008,7 +7025,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HEAP_OCCUPANCY_HIGH_WATERMARK_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1478">HEAP_OCCUPANCY_HIGH_WATERMARK_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1480">HEAP_OCCUPANCY_HIGH_WATERMARK_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HEAP_OCCUPANCY_HIGH_WATERMARK_KEY">Constant Field Values</a></dd>
@@ -7021,7 +7038,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK</h4>
-<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1480">DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK</a></pre>
+<pre>public static final&nbsp;float <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1482">DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK">Constant Field Values</a></dd>
@@ -7034,7 +7051,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGION_SPLIT_THREADS_MAX</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/HConstants.html#line.1486">REGION_SPLIT_THREADS_MAX</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/HConstants.html#line.1488">REGION_SPLIT_THREADS_MAX</a></pre>
 <div class="block">The max number of threads used for splitting storefiles in parallel during
  the region split process.</div>
 <dl>
@@ -7049,7 +7066,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_DATA_TTL_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1491">HBASE_CANARY_WRITE_DATA_TTL_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1493">HBASE_CANARY_WRITE_DATA_TTL_KEY</a></pre>
 <div class="block">Canary config keys</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7063,7 +7080,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1493">HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1495">HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY">Constant Field Values</a></dd>
@@ -7076,7 +7093,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1496">HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1498">HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY">Constant Field Values</a></dd>
@@ -7089,7 +7106,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_VALUE_SIZE_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1499">HBASE_CANARY_WRITE_VALUE_SIZE_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1501">HBASE_CANARY_WRITE_VALUE_SIZE_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_WRITE_VALUE_SIZE_KEY">Constant Field Values</a></dd>
@@ -7102,7 +7119,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1501">HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1503">HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY">Constant Field Values</a></dd>
@@ -7115,7 +7132,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_READ_RAW_SCAN_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1504">HBASE_CANARY_READ_RAW_SCAN_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1506">HBASE_CANARY_READ_RAW_SCAN_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_READ_RAW_SCAN_KEY">Constant Field Values</a></dd>
@@ -7128,7 +7145,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>HBASE_CANARY_READ_ALL_CF</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/HConstants.html#line.1506">HBASE_CANARY_READ_ALL_CF</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/HConstants.html#line.1508">HBASE_CANARY_READ_ALL_CF</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.HBASE_CANARY_READ_ALL_CF">Constant Field Values</a></dd>
@@ -7141,7 +7158,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ZK_CLIENT_KEYTAB_FILE</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/HConstants.html#line.1510">ZK_CLIENT_KEYTAB_FILE</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/HConstants.html#line.1512">ZK_CLIENT_KEYTAB_FILE</a></pre>
 <div class="block">Configuration keys for programmatic JAAS configuration for secured ZK interaction</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7155,7 +7172,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ZK_CLIENT_KERBEROS_PRINCIPAL</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/HConstants.html#line.1511">ZK_CLIENT_KERBEROS_PRINCIPAL</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/HConstants.html#line.1513">ZK_CLIENT_KERBEROS_PRINCIPAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL">Constant Field Values</a></dd>
@@ -7168,7 +7185,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ZK_SERVER_KEYTAB_FILE</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/HConstants.html#line.1513">ZK_SERVER_KEYTAB_FILE</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/HConstants.html#line.1515">ZK_SERVER_KEYTAB_FILE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.ZK_SERVER_KEYTAB_FILE">Constant Field Values</a></dd>
@@ -7181,7 +7198,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ZK_SERVER_KERBEROS_PRINCIPAL</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/HConstants.html#line.1514">ZK_SERVER_KERBEROS_PRINCIPAL</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/HConstants.html#line.1516">ZK_SERVER_KERBEROS_PRINCIPAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.ZK_SERVER_KERBEROS_PRINCIPAL">Constant Field Values</a></dd>
@@ -7194,7 +7211,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TEMPORARY_FS_DIRECTORY_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1518">TEMPORARY_FS_DIRECTORY_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1520">TEMPORARY_FS_DIRECTORY_KEY</a></pre>
 <div class="block">Config key for hbase temporary directory in hdfs</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7208,7 +7225,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_TEMPORARY_HDFS_DIRECTORY</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/HConstants.html#line.1525">DEFAULT_TEMPORARY_HDFS_DIRECTORY</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/HConstants.html#line.1527">DEFAULT_TEMPORARY_HDFS_DIRECTORY</a></pre>
 <div class="block">Don't use it! This'll get you the wrong path in a secure cluster.
  Use FileSystem.getHomeDirectory() or
  "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()</div>
@@ -7220,7 +7237,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</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/HConstants.html#line.1528">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</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/HConstants.html#line.1530">SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">Constant Field Values</a></dd>
@@ -7233,7 +7250,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1530">DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1532">DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT">Constant Field Values</a></dd>
@@ -7246,7 +7263,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#line.1532">SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#line.1534">SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SNAPSHOT_RESTORE_FAILSAFE_NAME">Constant Field Values</a></dd>
@@ -7259,7 +7276,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#line.1534">DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</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/HConstants.html#line.1536">DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME">Constant Field Values</a></dd>
@@ -7272,7 +7289,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_LOSSY_COUNTING_ERROR_RATE</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/HConstants.html#line.1537">DEFAULT_LOSSY_COUNTING_ERROR_RATE</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/HConstants.html#line.1539">DEFAULT_LOSSY_COUNTING_ERROR_RATE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_LOSSY_COUNTING_ERROR_RATE">Constant Field Values</a></dd>
@@ -7285,7 +7302,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_IMPLEMENTED</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/HConstants.html#line.1539">NOT_IMPLEMENTED</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/HConstants.html#line.1541">NOT_IMPLEMENTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.NOT_IMPLEMENTED">Constant Field Values</a></dd>
@@ -7298,7 +7315,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_TTL</h4>
-<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1542">DEFAULT_SNAPSHOT_TTL</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1544">DEFAULT_SNAPSHOT_TTL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_TTL">Constant Field Values</a></dd>
@@ -7311,7 +7328,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SNAPSHOT_TTL_CONFIG_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1545">DEFAULT_SNAPSHOT_TTL_CONFIG_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1547">DEFAULT_SNAPSHOT_TTL_CONFIG_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SNAPSHOT_TTL_CONFIG_KEY">Constant Field Values</a></dd>
@@ -7324,7 +7341,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STORE_FILE_REF_COUNT_THRESHOLD</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/HConstants.html#line.1548">STORE_FILE_REF_COUNT_THRESHOLD</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/HConstants.html#line.1550">STORE_FILE_REF_COUNT_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.STORE_FILE_REF_COUNT_THRESHOLD">Constant Field Values</a></dd>
@@ -7337,7 +7354,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1552">DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1554">DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD">Constant Field Values</a></dd>
@@ -7350,7 +7367,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONS_RECOVERY_INTERVAL</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/HConstants.html#line.1554">REGIONS_RECOVERY_INTERVAL</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/HConstants.html#line.1556">REGIONS_RECOVERY_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.REGIONS_RECOVERY_INTERVAL">Constant Field Values</a></dd>
@@ -7363,7 +7380,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_REGIONS_RECOVERY_INTERVAL</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1557">DEFAULT_REGIONS_RECOVERY_INTERVAL</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1559">DEFAULT_REGIONS_RECOVERY_INTERVAL</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_REGIONS_RECOVERY_INTERVAL">Constant Field Values</a></dd>
@@ -7376,7 +7393,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_OPEN_REGION_THREADS</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/HConstants.html#line.1562">MASTER_OPEN_REGION_THREADS</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/HConstants.html#line.1564">MASTER_OPEN_REGION_THREADS</a></pre>
 <div class="block">Configurations for master executor services.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7390,7 +7407,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_OPEN_REGION_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1564">MASTER_OPEN_REGION_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1566">MASTER_OPEN_REGION_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_OPEN_REGION_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7403,7 +7420,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_CLOSE_REGION_THREADS</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/HConstants.html#line.1566">MASTER_CLOSE_REGION_THREADS</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/HConstants.html#line.1568">MASTER_CLOSE_REGION_THREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_CLOSE_REGION_THREADS">Constant Field Values</a></dd>
@@ -7416,7 +7433,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_CLOSE_REGION_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1568">MASTER_CLOSE_REGION_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1570">MASTER_CLOSE_REGION_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_CLOSE_REGION_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7429,7 +7446,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_SERVER_OPERATIONS_THREADS</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/HConstants.html#line.1570">MASTER_SERVER_OPERATIONS_THREADS</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/HConstants.html#line.1572">MASTER_SERVER_OPERATIONS_THREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_SERVER_OPERATIONS_THREADS">Constant Field Values</a></dd>
@@ -7442,7 +7459,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_SERVER_OPERATIONS_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1572">MASTER_SERVER_OPERATIONS_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1574">MASTER_SERVER_OPERATIONS_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_SERVER_OPERATIONS_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7455,7 +7472,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_META_SERVER_OPERATIONS_THREADS</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/HConstants.html#line.1574">MASTER_META_SERVER_OPERATIONS_THREADS</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/HConstants.html#line.1576">MASTER_META_SERVER_OPERATIONS_THREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_META_SERVER_OPERATIONS_THREADS">Constant Field Values</a></dd>
@@ -7468,7 +7485,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1576">MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1578">MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7481,7 +7498,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_LOG_REPLAY_OPS_THREADS</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/HConstants.html#line.1578">MASTER_LOG_REPLAY_OPS_THREADS</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/HConstants.html#line.1580">MASTER_LOG_REPLAY_OPS_THREADS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_LOG_REPLAY_OPS_THREADS">Constant Field Values</a></dd>
@@ -7494,7 +7511,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1580">MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1582">MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT">Constant Field Values</a></dd>
@@ -7507,7 +7524,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SLOW_LOG_RING_BUFFER_SIZE</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1582">DEFAULT_SLOW_LOG_RING_BUFFER_SIZE</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1584">DEFAULT_SLOW_LOG_RING_BUFFER_SIZE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SLOW_LOG_RING_BUFFER_SIZE">Constant Field Values</a></dd>
@@ -7520,7 +7537,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_LOG_BUFFER_ENABLED_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1584">SLOW_LOG_BUFFER_ENABLED_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1586">SLOW_LOG_BUFFER_ENABLED_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SLOW_LOG_BUFFER_ENABLED_KEY">Constant Field Values</a></dd>
@@ -7533,7 +7550,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ONLINE_LOG_PROVIDER_ENABLED</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1586">DEFAULT_ONLINE_LOG_PROVIDER_ENABLED</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1588">DEFAULT_ONLINE_LOG_PROVIDER_ENABLED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED">Constant Field Values</a></dd>
@@ -7546,7 +7563,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOWLOG_INFO_FAMILY_STR</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/HConstants.html#line.1589">SLOWLOG_INFO_FAMILY_STR</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/HConstants.html#line.1591">SLOWLOG_INFO_FAMILY_STR</a></pre>
 <div class="block">The slowlog info family as a string</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7560,7 +7577,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOWLOG_INFO_FAMILY</h4>
-<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1592">SLOWLOG_INFO_FAMILY</a></pre>
+<pre>public static final&nbsp;byte[] <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1594">SLOWLOG_INFO_FAMILY</a></pre>
 <div class="block">The slowlog info family</div>
 </li>
 </ul>
@@ -7570,7 +7587,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_LOG_SYS_TABLE_ENABLED_KEY</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1594">SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1596">SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY">Constant Field Values</a></dd>
@@ -7583,7 +7600,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1596">DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1598">DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../constant-values.html#org.apache.hadoop.hbase.HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY">Constant Field Values</a></dd>
@@ -7596,7 +7613,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>BATCH_ROWS_THRESHOLD_NAME</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/HConstants.html#line.1601">BATCH_ROWS_THRESHOLD_NAME</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/HConstants.html#line.1603">BATCH_ROWS_THRESHOLD_NAME</a></pre>
 <div class="block">Number of rows in a batch operation above which a warning will be logged.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7610,7 +7627,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BATCH_ROWS_THRESHOLD_DEFAULT</h4>
-<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1606">BATCH_ROWS_THRESHOLD_DEFAULT</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1608">BATCH_ROWS_THRESHOLD_DEFAULT</a></pre>
 <div class="block">Default value of <a href="../../../../org/apache/hadoop/hbase/HConstants.html#BATCH_ROWS_THRESHOLD_NAME"><code>BATCH_ROWS_THRESHOLD_NAME</code></a></div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -7632,7 +7649,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HConstants</h4>
-<pre>private&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1608">HConstants</a>()</pre>
+<pre>private&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/HConstants.html#line.1610">HConstants</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html b/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
index 9947424..5f7fad2 100644
--- a/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/ScheduledChore.html
@@ -113,7 +113,7 @@
 </dl>
 <dl>
 <dt>Direct Known Subclasses:</dt>
-<dd><a href="../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/janitor/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master.janitor">CatalogJanitor</a>, <a href="../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">CleanerChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a>, <a href="../../../../org/apache/hadoop/hbase/ExecutorStatusChore.html" title="class in org.apache.hadoop.hbase">ExecutorStatusChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.html" title="class in org.apache.hadoop.hbase.quotas">FileSystemUtilizationChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/HbckChore.html" title="class in org.apache.hadoop.hbase.master">HbckChore</a>, <a href="../../../../org/apache/hadoop/hbase/HealthCheckChore.html" title="class in org.apache.hadoop.hbase">HealthCheckChore</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTunerChore</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.CompactionChecker</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.PeriodicMemStoreFlusher</a>, <a href="../../../../org/apache/hadoop/hbase/mob/MobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.mob">MobFileCleanerChore</a>, <a href="../../../../org/apache/hadoop/hbase/mob/MobFileCompactionChore.html" title="class in org.apache.hadoop.hbase.mob">MobFileCompactionChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/QuotaCache.QuotaRefresherChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaCache.QuotaRefresherChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/RegionSizeReportingChore.html" title="class in org.apache.hadoop.hbase.quotas">RegionSizeReportingChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/RegionsRecoveryChore.html" title="class in org.apache.hadoop.hbase.master">RegionsRecoveryChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a>, <a href="../../../../org/apache/hadoop/hbase/master/ServerManager.FlushedSequenceIdFlusher.html" title="class in org.apache.hadoop.hbase.master">ServerManager.FlushedSequenceIdFlusher</a>, <a href="../../../../org/apache/hadoop/hbase/namequeues/SlowLogTableOpsChore.html" title="class in org.apache.hadoop.hbase.namequeues">SlowLogTableOpsChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/cleaner/SnapshotCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">SnapshotCleanerChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaRefresherChore.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaRefresherChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/SplitLogManager.TimeoutMonitor.html" title="class in org.apache.hadoop.hbase.master">SplitLogManager.TimeoutMonitor</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a></dd>
+<dd><a href="../../../../org/apache/hadoop/hbase/master/balancer/BalancerChore.html" title="class in org.apache.hadoop.hbase.master.balancer">BalancerChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/janitor/CatalogJanitor.html" title="class in org.apache.hadoop.hbase.master.janitor">CatalogJanitor</a>, <a href="../../../../org/apache/hadoop/hbase/master/cleaner/CleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">CleanerChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/balancer/ClusterStatusChore.html" title="class in org.apache.hadoop.hbase.master.balancer">ClusterStatusChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/ClusterStatusPublisher.html" title="class in org.apache.hadoop.hbase.master">ClusterStatusPublisher</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a>, <a href="../../../../org/apache/hadoop/hbase/ExecutorStatusChore.html" title="class in org.apache.hadoop.hbase">ExecutorStatusChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.html" title="class in org.apache.hadoop.hbase.quotas">FileSystemUtilizationChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/HbckChore.html" title="class in org.apache.hadoop.hbase.master">HbckChore</a>, <a href="../../../../org/apache/hadoop/hbase/HealthCheckChore.html" title="class in org.apache.hadoop.hbase">HealthCheckChore</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.HeapMemoryTunerChore.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager.HeapMemoryTunerChore</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.CompactionChecker</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.PeriodicMemStoreFlusher</a>, <a href="../../../../org/apache/hadoop/hbase/mob/MobFileCleanerChore.html" title="class in org.apache.hadoop.hbase.mob">MobFileCleanerChore</a>, <a href="../../../../org/apache/hadoop/hbase/mob/MobFileCompactionChore.html" title="class in org.apache.hadoop.hbase.mob">MobFileCompactionChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/QuotaCache.QuotaRefresherChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaCache.QuotaRefresherChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/QuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">QuotaObserverChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer">RegionNormalizerChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/RegionSizeReportingChore.html" title="class in org.apache.hadoop.hbase.quotas">RegionSizeReportingChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/RegionsRecoveryChore.html" title="class in org.apache.hadoop.hbase.master">RegionsRecoveryChore</a>, <a href="../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner">ReplicationBarrierCleaner</a>, <a href="../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl.ReplicationStatisticsChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/ServerManager.FlushedSequenceIdFlusher.html" title="class in org.apache.hadoop.hbase.master">ServerManager.FlushedSequenceIdFlusher</a>, <a href="../../../../org/apache/hadoop/hbase/namequeues/SlowLogTableOpsChore.html" title="class in org.apache.hadoop.hbase.namequeues">SlowLogTableOpsChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/cleaner/SnapshotCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner">SnapshotCleanerChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/SnapshotQuotaObserverChore.html" title="class in org.apache.hadoop.hbase.quotas">SnapshotQuotaObserverChore</a>, <a href="../../../../org/apache/hadoop/hbase/quotas/SpaceQuotaRefresherChore.html" title="class in org.apache.hadoop.hbase.quotas">SpaceQuotaRefresherChore</a>, <a href="../../../../org/apache/hadoop/hbase/master/SplitLogManager.TimeoutMonitor.html" title="class in org.apache.hadoop.hbase.master">SplitLogManager.TimeoutMonitor</a>, <a href="../../../../org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 761a9cc..d82c382 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,10 +166,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/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.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/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/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/CellScanner.html b/devapidocs/org/apache/hadoop/hbase/class-use/CellScanner.html
index 5ec15cd..96dcb07 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/CellScanner.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/CellScanner.html
@@ -115,10 +115,16 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
+<td class="colLast">
+<div class="block">Multi Cluster Replication</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -919,6 +925,28 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a> in <a href="../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> with parameters of type <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSinkServiceImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateLogEntries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry&gt;&nbsp;entries,
+                   <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
+                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;replicationClusterId,
+                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceBaseNamespaceDirPath,
+                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceHFileArchiveDirPath)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
 <!--   -->
 </a>
@@ -940,16 +968,6 @@
 <div class="block">Replicate this array of entries directly into the local cluster using the native client.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><span class="typeNameLabel">Replication.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateLogEntries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry&gt;&nbsp;entries,
-                   <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
-                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;replicationClusterId,
-                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceBaseNamespaceDirPath,
-                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceHFileArchiveDirPath)</code>
-<div class="block">Carry on the list of log entries down to the sink</div>
-</td>
-</tr>
 </tbody>
 </table>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html b/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
index e195a3a..0225d05 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/ScheduledChore.html
@@ -122,6 +122,16 @@
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver">org.apache.hadoop.hbase.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
+<td class="colLast">
+<div class="block">Multi Cluster Replication</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -617,6 +627,44 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> in <a href="../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
+<caption><span>Subclasses of <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> in <a href="../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl.ReplicationStatisticsChore</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> in <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing subclasses, and an explanation">
+<caption><span>Subclasses of <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> in <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsChore</a></span></code>
+<div class="block">Statistics task.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Server.html b/devapidocs/org/apache/hadoop/hbase/class-use/Server.html
index acafc52..76353ea 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Server.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Server.html
@@ -725,6 +725,10 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSinkServiceImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#server">server</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationEndpoint.Context.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationEndpoint.Context.html#server">server</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
@@ -742,6 +746,23 @@
 </tr>
 </tbody>
 </table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> with parameters of type <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSinkServiceImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#initialize-org.apache.hadoop.hbase.Server-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">initialize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
+          org.apache.hadoop.fs.FileSystem&nbsp;fs,
+          org.apache.hadoop.fs.Path&nbsp;logdir,
+          org.apache.hadoop.fs.Path&nbsp;oldLogDir,
+          <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;walProvider)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
 <caption><span>Constructors in <a href="../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> with parameters of type <a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html b/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
index f749527..01cfa00 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/Stoppable.html
@@ -1037,6 +1037,11 @@
 </tr>
 <tbody>
 <tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#ReplicationStatisticsChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ReplicationStatisticsChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+                          <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+                          int&nbsp;period)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html#ReplicationTrackerZKImpl-org.apache.hadoop.hbase.zookeeper.ZKWatcher-org.apache.hadoop.hbase.Abortable-org.apache.hadoop.hbase.Stoppable-">ReplicationTrackerZKImpl</a></span>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKWatcher.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKWatcher</a>&nbsp;zookeeper,
                         <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a>&nbsp;abortable,
                         <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper)</code>&nbsp;</td>
@@ -1093,6 +1098,19 @@
 </tr>
 </tbody>
 </table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
+<caption><span>Constructors in <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a> with parameters of type <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#ReplicationStatisticsChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ReplicationStatisticsChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+                          <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+                          int&nbsp;period)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 </li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.rsgroup">
 <!--   -->
diff --git a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
index 27ecd74..761e233 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -238,76 +238,80 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.regionserver.wal">org.apache.hadoop.hbase.regionserver.wal</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
 <td class="colLast">
 <div class="block">Multi Cluster Replication</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.rest">org.apache.hadoop.hbase.rest</a></td>
 <td class="colLast">
 <div class="block">HBase REST</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.rsgroup">org.apache.hadoop.hbase.rsgroup</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.security.visibility">org.apache.hadoop.hbase.security.visibility</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.slowlog">org.apache.hadoop.hbase.slowlog</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift">org.apache.hadoop.hbase.thrift</a></td>
 <td class="colLast">
 <div class="block">Provides an HBase <a href="http://incubator.apache.org/thrift/">Thrift</a>
 service.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift2">org.apache.hadoop.hbase.thrift2</a></td>
 <td class="colLast">
 <div class="block">Provides an HBase <a href="http://thrift.apache.org/">Thrift</a>
 service.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift2.client">org.apache.hadoop.hbase.thrift2.client</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util.compaction">org.apache.hadoop.hbase.util.compaction</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.client">org.apache.hbase.archetypes.exemplars.client</a></td>
 <td class="colLast">
 <div class="block">This package provides fully-functional exemplar Java code demonstrating
@@ -315,7 +319,7 @@
  archetype with hbase-client dependency.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hbase.archetypes.exemplars.shaded_client">org.apache.hbase.archetypes.exemplars.shaded_client</a></td>
 <td class="colLast">
 <div class="block">This package provides fully-functional exemplar Java code demonstrating
@@ -8819,6 +8823,59 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.regionserver.wal">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a> in <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> with type parameters of type <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <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;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsWALSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#perTableAppendCount">perTableAppendCount</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/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsWALSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#perTableAppendSize">perTableAppendSize</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> with parameters of type <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsWALSource.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendCount-org.apache.hadoop.hbase.TableName-">incrementAppendCount</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
+<div class="block">Increment the count of wal appends</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsWALSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendCount-org.apache.hadoop.hbase.TableName-">incrementAppendCount</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsWALSource.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">incrementAppendSize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                   long&nbsp;size)</code>
+<div class="block">Add the append size.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsWALSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">incrementAppendSize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                   long&nbsp;size)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 79163dd..2183447 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -449,24 +449,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/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/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/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/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/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/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/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/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/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/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/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index 9a728ec..6b85449 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -182,8 +182,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 9df618b..08c8988 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -190,13 +190,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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/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/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/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/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/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/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/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index cd793c2..d9bf09d 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
index b8f3866..007e90f 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/terminal/package-tree.html
@@ -107,8 +107,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/Color.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">Color</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/KeyPress.Type.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">KeyPress.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.terminal.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/terminal/Color.html" title="enum in org.apache.hadoop.hbase.hbtop.terminal"><span class="typeNameLink">Color</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index d5349b6..6e8998a 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -141,8 +141,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.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
 </ul>
 </li>
 </ul>
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 7f4549c..724a05e 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -301,12 +301,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/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/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index c3f203e..e9be621 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -296,10 +296,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.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/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
index 5c89e3f..f8add9f 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/assignment/package-tree.html
@@ -151,8 +151,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.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/ServerState.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">ServerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.assignment.<a href="../../../../../../org/apache/hadoop/hbase/master/assignment/TransitRegionStateProcedure.TransitionType.html" title="enum in org.apache.hadoop.hbase.master.assignment"><span class="typeNameLink">TransitRegionStateProcedure.TransitionType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 39196e0..4aadbb8 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -199,8 +199,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.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.Action.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.Action.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.Cluster.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BaseLoadBalancer.Cluster.LocalityType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 9b6f4dd..ac0e9a0 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -349,13 +349,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/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/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/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/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 57049d0..616d87c 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -222,9 +222,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.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 81f1304..e862457 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -426,19 +426,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/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/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/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/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/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/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/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/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/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/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/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/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-use.html b/devapidocs/org/apache/hadoop/hbase/package-use.html
index be44f35..16c45ed 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-use.html
@@ -3162,6 +3162,11 @@
 <div class="block">All hbase specific IOExceptions should be subclasses of HBaseIOException</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/TableName.html#org.apache.hadoop.hbase.regionserver.wal">TableName</a>
+<div class="block">Immutable POJO class for representing a table name.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -3186,10 +3191,20 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/CellScanner.html#org.apache.hadoop.hbase.replication">CellScanner</a>
+<div class="block">An interface for iterating through a sequence of cells.</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ExtendedCellBuilder.html#org.apache.hadoop.hbase.replication">ExtendedCellBuilder</a>
 <div class="block">For internal purpose.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ScheduledChore.html#org.apache.hadoop.hbase.replication">ScheduledChore</a>
+<div class="block">ScheduledChore is a task performed on a period in hbase.</div>
+</td>
+</tr>
 <tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/Server.html#org.apache.hadoop.hbase.replication">Server</a>
 <div class="block">Defines a curated set of shared functions implemented by HBase servers (Masters
@@ -3295,27 +3310,32 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ScheduledChore.html#org.apache.hadoop.hbase.replication.regionserver">ScheduledChore</a>
+<div class="block">ScheduledChore is a task performed on a period in hbase.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/Server.html#org.apache.hadoop.hbase.replication.regionserver">Server</a>
 <div class="block">Defines a curated set of shared functions implemented by HBase servers (Masters
  and RegionServers).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/ServerName.html#org.apache.hadoop.hbase.replication.regionserver">ServerName</a>
 <div class="block">Name of a particular incarnation of an HBase Server.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/Stoppable.html#org.apache.hadoop.hbase.replication.regionserver">Stoppable</a>
 <div class="block">Implementers are Stoppable.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/TableDescriptors.html#org.apache.hadoop.hbase.replication.regionserver">TableDescriptors</a>
 <div class="block">Get, remove and modify table descriptors.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../org/apache/hadoop/hbase/class-use/TableName.html#org.apache.hadoop.hbase.replication.regionserver">TableName</a>
 <div class="block">Immutable POJO class for representing a table name.</div>
 </td>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 29d0095..1326a64 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,9 +216,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.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/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 9d78ecf..f4ee26a 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/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/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/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html
index 3c8b23c..fd362aa 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 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1775">HRegionServer.CompactionChecker</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1788">HRegionServer.CompactionChecker</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 <div class="block">Inner class that runs on a long period checking if regions need compaction.</div>
 </li>
@@ -234,7 +234,7 @@
 <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.1776">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.1789">instance</a></pre>
 </li>
 </ul>
 <a name="majorCompactPriority">
@@ -243,7 +243,7 @@
 <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.1777">majorCompactPriority</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1790">majorCompactPriority</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_PRIORITY">
@@ -252,7 +252,7 @@
 <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.1778">DEFAULT_PRIORITY</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1791">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>
@@ -265,7 +265,7 @@
 <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.1781">iteration</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1794">iteration</a></pre>
 </li>
 </ul>
 </li>
@@ -282,7 +282,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CompactionChecker</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1783">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.1796">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>
@@ -301,7 +301,7 @@
 <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.1797">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.CompactionChecker.html#line.1810">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>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html
index f7b98e9..be14084 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 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3479">HRegionServer.MovedRegionInfo</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3494">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>
@@ -210,7 +210,7 @@
 <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.3480">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.3495">serverName</a></pre>
 </li>
 </ul>
 <a name="seqNum">
@@ -219,7 +219,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>seqNum</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3481">seqNum</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3496">seqNum</a></pre>
 </li>
 </ul>
 </li>
@@ -236,7 +236,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MovedRegionInfo</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3483">MovedRegionInfo</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;serverName,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3498">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>
@@ -254,7 +254,7 @@
 <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.3488">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.3503">getServerName</a>()</pre>
 </li>
 </ul>
 <a name="getSeqNum--">
@@ -263,7 +263,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3492">getSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html#line.3507">getSeqNum</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html
index 5ee6e9f..4883103 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 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1839">HRegionServer.PeriodicMemStoreFlusher</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1852">HRegionServer.PeriodicMemStoreFlusher</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
 </li>
 </ul>
@@ -232,7 +232,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>server</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.PeriodicMemStoreFlusher.html#line.1840">server</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.PeriodicMemStoreFlusher.html#line.1853">server</a></pre>
 </li>
 </ul>
 <a name="RANGE_OF_DELAY">
@@ -241,7 +241,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>RANGE_OF_DELAY</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1841">RANGE_OF_DELAY</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1854">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>
@@ -254,7 +254,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MIN_DELAY_TIME</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1842">MIN_DELAY_TIME</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1855">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>
@@ -267,7 +267,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rangeOfDelayMs</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1843">rangeOfDelayMs</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1856">rangeOfDelayMs</a></pre>
 </li>
 </ul>
 </li>
@@ -284,7 +284,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PeriodicMemStoreFlusher</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1845">PeriodicMemStoreFlusher</a>(int&nbsp;cacheFlushInterval,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1858">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>
@@ -302,7 +302,7 @@
 <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.1855">chore</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.PeriodicMemStoreFlusher.html#line.1868">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>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
index 995521c..ec0a990 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
@@ -122,7 +122,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3867">HRegionServer.SystemExitWhenAbortTimeout</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3882">HRegionServer.SystemExitWhenAbortTimeout</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/util/TimerTask.html?is-external=true" title="class or interface in java.util">TimerTask</a></pre>
 <div class="block">Force to terminate region server when abort timeout.</div>
 </li>
@@ -199,7 +199,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SystemExitWhenAbortTimeout</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3869">SystemExitWhenAbortTimeout</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3884">SystemExitWhenAbortTimeout</a>()</pre>
 </li>
 </ul>
 </li>
@@ -216,7 +216,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3873">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html#line.3888">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>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
index 68c1bf0..e726be6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -522,116 +522,120 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#rssStub">rssStub</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private boolean</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#sameReplicationSourceAndSink">sameReplicationSourceAndSink</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#secureBulkLoadManager">secureBulkLoadManager</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <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/regionserver/HRegionServer.html#serverName">serverName</a></span></code>
 <div class="block">The server name the Master sees us as.</div>
 </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/regionserver/HRegionServer.html#shortOperationTimeout">shortOperationTimeout</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/regionserver/HRegionServer.html#shutDown">shutDown</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/util/Sleeper.html" title="class in org.apache.hadoop.hbase.util">Sleeper</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#sleeper">sleeper</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/namequeues/SlowLogTableOpsChore.html" title="class in org.apache.hadoop.hbase.namequeues">SlowLogTableOpsChore</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#slowLogTableOpsChore">slowLogTableOpsChore</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/trace/SpanReceiverHost.html" title="class in org.apache.hadoop.hbase.trace">SpanReceiverHost</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#spanReceiverHost">spanReceiverHost</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver">SplitLogWorker</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#splitLogWorker">splitLogWorker</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#startcode">startcode</a></span></code>
 <div class="block">This servers startcode.</div>
 </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/regionserver/HRegionServer.html#stopped">stopped</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#stopping">stopping</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#storefileRefresher">storefileRefresher</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/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#submittedRegionProcedures">submittedRegionProcedures</a></span></code>
 <div class="block">Used to cache the open/close region procedures which already submitted.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#tableDescriptors">tableDescriptors</a></span></code>
 <div class="block">Go here to get table descriptors.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#TEST_SKIP_REPORTING_TRANSITION">TEST_SKIP_REPORTING_TRANSITION</a></span></code>
 <div class="block">For testing only!  Set to true to skip notifying region assignment to master .</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#threadWakeFrequency">threadWakeFrequency</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#TIMEOUT_REGION_MOVED">TIMEOUT_REGION_MOVED</a></span></code>
 <div class="block">We need a timeout.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#uncaughtExceptionHandler">uncaughtExceptionHandler</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#userProvider">userProvider</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/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/regionserver/HRegionServer.html#useThisHostnameInstead">useThisHostnameInstead</a></span></code>
 <div class="block">hostname specified by hostname config</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#walFactory">walFactory</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/fs/HFileSystem.html" title="class in org.apache.hadoop.hbase.fs">HFileSystem</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#walFs">walFs</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#walRoller">walRoller</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#walRootDir">walRootDir</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <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/regionserver/HRegionServer.html#zooKeeper">zooKeeper</a></span></code>&nbsp;</td>
 </tr>
@@ -1732,13 +1736,22 @@
 <pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.303">replicationSinkHandler</a></pre>
 </li>
 </ul>
+<a name="sameReplicationSourceAndSink">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sameReplicationSourceAndSink</h4>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.304">sameReplicationSourceAndSink</a></pre>
+</li>
+</ul>
 <a name="compactSplitThread">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>compactSplitThread</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.306">compactSplitThread</a></pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.307">compactSplitThread</a></pre>
 </li>
 </ul>
 <a name="onlineRegions">
@@ -1747,7 +1760,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onlineRegions</h4>
-<pre>private final&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/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.312">onlineRegions</a></pre>
+<pre>private final&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/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.313">onlineRegions</a></pre>
 <div class="block">Map of regions currently being served by this region server. Key is the
  encoded region name.  All access should be synchronized.</div>
 </li>
@@ -1758,7 +1771,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onlineRegionsLock</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.317">onlineRegionsLock</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantReadWriteLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.318">onlineRegionsLock</a></pre>
 <div class="block">Lock for gating access to <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#onlineRegions"><code>onlineRegions</code></a>.
  TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?</div>
 </li>
@@ -1769,7 +1782,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>regionFavoredNodesMap</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.328">regionFavoredNodesMap</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.329">regionFavoredNodesMap</a></pre>
 <div class="block">Map of encoded region names to the DataNode locations they should be hosted on
  We store the value as InetSocketAddress since this is used only in HDFS
  API (create() that takes favored nodes as hints for placing file blocks).
@@ -1785,7 +1798,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>leaseManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.330">leaseManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.331">leaseManager</a></pre>
 </li>
 </ul>
 <a name="executorService">
@@ -1794,7 +1807,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>executorService</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.333">executorService</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorService.html" title="class in org.apache.hadoop.hbase.executor">ExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.334">executorService</a></pre>
 </li>
 </ul>
 <a name="dataFsOk">
@@ -1803,7 +1816,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>dataFsOk</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.335">dataFsOk</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.336">dataFsOk</a></pre>
 </li>
 </ul>
 <a name="dataFs">
@@ -1812,7 +1825,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>dataFs</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/fs/HFileSystem.html" title="class in org.apache.hadoop.hbase.fs">HFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.336">dataFs</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/fs/HFileSystem.html" title="class in org.apache.hadoop.hbase.fs">HFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.337">dataFs</a></pre>
 </li>
 </ul>
 <a name="walFs">
@@ -1821,7 +1834,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>walFs</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/fs/HFileSystem.html" title="class in org.apache.hadoop.hbase.fs">HFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.337">walFs</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/fs/HFileSystem.html" title="class in org.apache.hadoop.hbase.fs">HFileSystem</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.338">walFs</a></pre>
 </li>
 </ul>
 <a name="stopped">
@@ -1830,7 +1843,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>stopped</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.342">stopped</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.343">stopped</a></pre>
 </li>
 </ul>
 <a name="abortRequested">
@@ -1839,7 +1852,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>abortRequested</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.346">abortRequested</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.347">abortRequested</a></pre>
 </li>
 </ul>
 <a name="ABORT_TIMEOUT">
@@ -1848,7 +1861,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ABORT_TIMEOUT</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/regionserver/HRegionServer.html#line.347">ABORT_TIMEOUT</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/regionserver/HRegionServer.html#line.348">ABORT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.ABORT_TIMEOUT">Constant Field Values</a></dd>
@@ -1861,7 +1874,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ABORT_TIMEOUT</h4>
-<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.349">DEFAULT_ABORT_TIMEOUT</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.350">DEFAULT_ABORT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.DEFAULT_ABORT_TIMEOUT">Constant Field Values</a></dd>
@@ -1874,7 +1887,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ABORT_TIMEOUT_TASK</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/regionserver/HRegionServer.html#line.351">ABORT_TIMEOUT_TASK</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/regionserver/HRegionServer.html#line.352">ABORT_TIMEOUT_TASK</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.ABORT_TIMEOUT_TASK">Constant Field Values</a></dd>
@@ -1887,7 +1900,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>stopping</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.355">stopping</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.356">stopping</a></pre>
 </li>
 </ul>
 <a name="killed">
@@ -1896,7 +1909,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>killed</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.356">killed</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.357">killed</a></pre>
 </li>
 </ul>
 <a name="shutDown">
@@ -1905,7 +1918,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shutDown</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.357">shutDown</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.358">shutDown</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -1914,7 +1927,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>protected final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.359">conf</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.360">conf</a></pre>
 </li>
 </ul>
 <a name="dataRootDir">
@@ -1923,7 +1936,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>dataRootDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.361">dataRootDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.362">dataRootDir</a></pre>
 </li>
 </ul>
 <a name="walRootDir">
@@ -1932,7 +1945,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>walRootDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.362">walRootDir</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.363">walRootDir</a></pre>
 </li>
 </ul>
 <a name="threadWakeFrequency">
@@ -1941,7 +1954,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>threadWakeFrequency</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.364">threadWakeFrequency</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.365">threadWakeFrequency</a></pre>
 </li>
 </ul>
 <a name="msgInterval">
@@ -1950,7 +1963,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>msgInterval</h4>
-<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.365">msgInterval</a></pre>
+<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.366">msgInterval</a></pre>
 </li>
 </ul>
 <a name="PERIOD_COMPACTION">
@@ -1959,7 +1972,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>PERIOD_COMPACTION</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/regionserver/HRegionServer.html#line.367">PERIOD_COMPACTION</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/regionserver/HRegionServer.html#line.368">PERIOD_COMPACTION</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PERIOD_COMPACTION">Constant Field Values</a></dd>
@@ -1972,7 +1985,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>compactionCheckFrequency</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.368">compactionCheckFrequency</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.369">compactionCheckFrequency</a></pre>
 </li>
 </ul>
 <a name="PERIOD_FLUSH">
@@ -1981,7 +1994,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>PERIOD_FLUSH</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/regionserver/HRegionServer.html#line.369">PERIOD_FLUSH</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/regionserver/HRegionServer.html#line.370">PERIOD_FLUSH</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.PERIOD_FLUSH">Constant Field Values</a></dd>
@@ -1994,7 +2007,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>flushCheckFrequency</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.370">flushCheckFrequency</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.371">flushCheckFrequency</a></pre>
 </li>
 </ul>
 <a name="rssStub">
@@ -2003,7 +2016,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>rssStub</h4>
-<pre>private volatile&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.373">rssStub</a></pre>
+<pre>private volatile&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.374">rssStub</a></pre>
 </li>
 </ul>
 <a name="lockStub">
@@ -2012,7 +2025,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>lockStub</h4>
-<pre>private volatile&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.374">lockStub</a></pre>
+<pre>private volatile&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.LockServiceProtos.LockService.BlockingInterface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.375">lockStub</a></pre>
 </li>
 </ul>
 <a name="rpcClient">
@@ -2021,7 +2034,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcClient</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.376">rpcClient</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ipc/RpcClient.html" title="interface in org.apache.hadoop.hbase.ipc">RpcClient</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.377">rpcClient</a></pre>
 </li>
 </ul>
 <a name="uncaughtExceptionHandler">
@@ -2030,7 +2043,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>uncaughtExceptionHandler</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.378">uncaughtExceptionHandler</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.379">uncaughtExceptionHandler</a></pre>
 </li>
 </ul>
 <a name="infoServer">
@@ -2039,7 +2052,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>infoServer</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.383">infoServer</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/http/InfoServer.html" title="class in org.apache.hadoop.hbase.http">InfoServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.384">infoServer</a></pre>
 </li>
 </ul>
 <a name="pauseMonitor">
@@ -2048,7 +2061,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>pauseMonitor</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.384">pauseMonitor</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.385">pauseMonitor</a></pre>
 </li>
 </ul>
 <a name="REGIONSERVER">
@@ -2057,7 +2070,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONSERVER</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/regionserver/HRegionServer.html#line.387">REGIONSERVER</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/regionserver/HRegionServer.html#line.388">REGIONSERVER</a></pre>
 <div class="block">region server process name</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -2071,7 +2084,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsRegionServer</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.390">metricsRegionServer</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.391">metricsRegionServer</a></pre>
 </li>
 </ul>
 <a name="metricsRegionServerImpl">
@@ -2080,7 +2093,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsRegionServerImpl</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.391">metricsRegionServerImpl</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.html" title="class in org.apache.hadoop.hbase.regionserver">MetricsRegionServerWrapperImpl</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.392">metricsRegionServerImpl</a></pre>
 </li>
 </ul>
 <a name="spanReceiverHost">
@@ -2089,7 +2102,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>spanReceiverHost</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/trace/SpanReceiverHost.html" title="class in org.apache.hadoop.hbase.trace">SpanReceiverHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.392">spanReceiverHost</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/trace/SpanReceiverHost.html" title="class in org.apache.hadoop.hbase.trace">SpanReceiverHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.393">spanReceiverHost</a></pre>
 </li>
 </ul>
 <a name="choreService">
@@ -2098,7 +2111,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>choreService</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.397">choreService</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ChoreService.html" title="class in org.apache.hadoop.hbase">ChoreService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.398">choreService</a></pre>
 <div class="block">ChoreService used to schedule tasks that we want to run periodically</div>
 </li>
 </ul>
@@ -2108,7 +2121,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>compactionChecker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.402">compactionChecker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.403">compactionChecker</a></pre>
 <div class="block">Check for compactions requests.</div>
 </li>
 </ul>
@@ -2118,7 +2131,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>periodicFlusher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.407">periodicFlusher</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.408">periodicFlusher</a></pre>
 <div class="block">Check for flushes</div>
 </li>
 </ul>
@@ -2128,7 +2141,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>walFactory</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.409">walFactory</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.html" title="class in org.apache.hadoop.hbase.wal">WALFactory</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.410">walFactory</a></pre>
 </li>
 </ul>
 <a name="walRoller">
@@ -2137,7 +2150,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>walRoller</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.411">walRoller</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LogRoller.html" title="class in org.apache.hadoop.hbase.regionserver">LogRoller</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.412">walRoller</a></pre>
 </li>
 </ul>
 <a name="procedureResultReporter">
@@ -2146,7 +2159,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>procedureResultReporter</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RemoteProcedureResultReporter.html" title="class in org.apache.hadoop.hbase.regionserver">RemoteProcedureResultReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.414">procedureResultReporter</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RemoteProcedureResultReporter.html" title="class in org.apache.hadoop.hbase.regionserver">RemoteProcedureResultReporter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.415">procedureResultReporter</a></pre>
 </li>
 </ul>
 <a name="online">
@@ -2155,7 +2168,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>online</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.417">online</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.418">online</a></pre>
 </li>
 </ul>
 <a name="zooKeeper">
@@ -2164,7 +2177,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>zooKeeper</h4>
-<pre>protected 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/regionserver/HRegionServer.html#line.420">zooKeeper</a></pre>
+<pre>protected 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/regionserver/HRegionServer.html#line.421">zooKeeper</a></pre>
 </li>
 </ul>
 <a name="masterAddressTracker">
@@ -2173,7 +2186,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>masterAddressTracker</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.423">masterAddressTracker</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/MasterAddressTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">MasterAddressTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.424">masterAddressTracker</a></pre>
 </li>
 </ul>
 <a name="clusterStatusTracker">
@@ -2182,7 +2195,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterStatusTracker</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ClusterStatusTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.426">clusterStatusTracker</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ClusterStatusTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ClusterStatusTracker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.427">clusterStatusTracker</a></pre>
 </li>
 </ul>
 <a name="splitLogWorker">
@@ -2191,7 +2204,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>splitLogWorker</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver">SplitLogWorker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.429">splitLogWorker</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.html" title="class in org.apache.hadoop.hbase.regionserver">SplitLogWorker</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.430">splitLogWorker</a></pre>
 </li>
 </ul>
 <a name="sleeper">
@@ -2200,7 +2213,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>sleeper</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Sleeper.html" title="class in org.apache.hadoop.hbase.util">Sleeper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.432">sleeper</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Sleeper.html" title="class in org.apache.hadoop.hbase.util">Sleeper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.433">sleeper</a></pre>
 </li>
 </ul>
 <a name="shortOperationTimeout">
@@ -2209,7 +2222,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shortOperationTimeout</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.434">shortOperationTimeout</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.435">shortOperationTimeout</a></pre>
 </li>
 </ul>
 <a name="regionServerAccounting">
@@ -2218,7 +2231,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>regionServerAccounting</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.436">regionServerAccounting</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerAccounting.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerAccounting</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.437">regionServerAccounting</a></pre>
 </li>
 </ul>
 <a name="slowLogTableOpsChore">
@@ -2227,7 +2240,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>slowLogTableOpsChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/SlowLogTableOpsChore.html" title="class in org.apache.hadoop.hbase.namequeues">SlowLogTableOpsChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.438">slowLogTableOpsChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/SlowLogTableOpsChore.html" title="class in org.apache.hadoop.hbase.namequeues">SlowLogTableOpsChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.439">slowLogTableOpsChore</a></pre>
 </li>
 </ul>
 <a name="blockCache">
@@ -2236,7 +2249,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>blockCache</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.441">blockCache</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.442">blockCache</a></pre>
 </li>
 </ul>
 <a name="mobFileCache">
@@ -2245,7 +2258,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>mobFileCache</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.443">mobFileCache</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.444">mobFileCache</a></pre>
 </li>
 </ul>
 <a name="healthCheckChore">
@@ -2254,7 +2267,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>healthCheckChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HealthCheckChore.html" title="class in org.apache.hadoop.hbase">HealthCheckChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.446">healthCheckChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HealthCheckChore.html" title="class in org.apache.hadoop.hbase">HealthCheckChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.447">healthCheckChore</a></pre>
 <div class="block">The health check chore.</div>
 </li>
 </ul>
@@ -2264,7 +2277,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>executorStatusChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ExecutorStatusChore.html" title="class in org.apache.hadoop.hbase">ExecutorStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.449">executorStatusChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ExecutorStatusChore.html" title="class in org.apache.hadoop.hbase">ExecutorStatusChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.450">executorStatusChore</a></pre>
 <div class="block">The Executor status collect chore.</div>
 </li>
 </ul>
@@ -2274,7 +2287,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceManagerChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.452">nonceManagerChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.453">nonceManagerChore</a></pre>
 <div class="block">The nonce manager chore.</div>
 </li>
 </ul>
@@ -2284,7 +2297,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorServiceHandlers</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>,org.apache.hbase.thirdparty.com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.454">coprocessorServiceHandlers</a></pre>
+<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>,org.apache.hbase.thirdparty.com.google.protobuf.Service&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.455">coprocessorServiceHandlers</a></pre>
 </li>
 </ul>
 <a name="serverName">
@@ -2293,7 +2306,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>serverName</h4>
-<pre>protected&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.html#line.461">serverName</a></pre>
+<pre>protected&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.html#line.462">serverName</a></pre>
 <div class="block">The server name the Master sees us as.  Its made from the hostname the
  master passes us, port, and server startcode. Gets set after registration
  against Master.</div>
@@ -2305,7 +2318,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>useThisHostnameInstead</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/regionserver/HRegionServer.html#line.466">useThisHostnameInstead</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/regionserver/HRegionServer.html#line.467">useThisHostnameInstead</a></pre>
 <div class="block">hostname specified by hostname config</div>
 </li>
 </ul>
@@ -2316,7 +2329,7 @@
 <li class="blockList">
 <h4>RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</h4>
 <pre>@InterfaceAudience.LimitedPrivate(value="Configuration")
-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/regionserver/HRegionServer.html#line.473">RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</a></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/regionserver/HRegionServer.html#line.474">RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY</a></pre>
 <div class="block">HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.
  Exception will be thrown if both are used.</div>
 <dl>
@@ -2331,7 +2344,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startcode</h4>
-<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.479">startcode</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.480">startcode</a></pre>
 <div class="block">This servers startcode.</div>
 </li>
 </ul>
@@ -2341,7 +2354,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>clusterId</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/regionserver/HRegionServer.html#line.484">clusterId</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/regionserver/HRegionServer.html#line.485">clusterId</a></pre>
 <div class="block">Unique identifier for the cluster we are a part of.</div>
 </li>
 </ul>
@@ -2351,7 +2364,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>storefileRefresher</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.487">storefileRefresher</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.html" title="class in org.apache.hadoop.hbase.regionserver">StorefileRefresherChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.488">storefileRefresher</a></pre>
 </li>
 </ul>
 <a name="rsHost">
@@ -2360,7 +2373,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>rsHost</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.489">rsHost</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionServerCoprocessorHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.490">rsHost</a></pre>
 </li>
 </ul>
 <a name="rspmHost">
@@ -2369,7 +2382,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>rspmHost</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/RegionServerProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">RegionServerProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.491">rspmHost</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/procedure/RegionServerProcedureManagerHost.html" title="class in org.apache.hadoop.hbase.procedure">RegionServerProcedureManagerHost</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.492">rspmHost</a></pre>
 </li>
 </ul>
 <a name="rsQuotaManager">
@@ -2378,7 +2391,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>rsQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.493">rsQuotaManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerRpcQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerRpcQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.494">rsQuotaManager</a></pre>
 </li>
 </ul>
 <a name="rsSpaceQuotaManager">
@@ -2387,7 +2400,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>rsSpaceQuotaManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.494">rsSpaceQuotaManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.495">rsSpaceQuotaManager</a></pre>
 </li>
 </ul>
 <a name="nonceManager">
@@ -2396,7 +2409,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceManager</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.514">nonceManager</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.515">nonceManager</a></pre>
 <div class="block">Nonce manager. Nonces are used to make operations like increment and append idempotent
  in the case where client doesn't receive the response from a successful operation and
  retries. We track the successful ops for some time via a nonce sent by client and handle
@@ -2421,7 +2434,7 @@
 <ul class="blockList">
 <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/regionserver/HRegionServer.html#line.516">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/regionserver/HRegionServer.html#line.517">userProvider</a></pre>
 </li>
 </ul>
 <a name="rpcServices">
@@ -2430,7 +2443,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>rpcServices</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.518">rpcServices</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RSRpcServices.html" title="class in org.apache.hadoop.hbase.regionserver">RSRpcServices</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.519">rpcServices</a></pre>
 </li>
 </ul>
 <a name="csm">
@@ -2439,7 +2452,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>csm</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.520">csm</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CoordinatedStateManager.html" title="interface in org.apache.hadoop.hbase">CoordinatedStateManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.521">csm</a></pre>
 </li>
 </ul>
 <a name="configurationManager">
@@ -2448,7 +2461,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>configurationManager</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.526">configurationManager</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.527">configurationManager</a></pre>
 <div class="block">Configuration manager is used to register/deregister and notify the configuration observers
  when the regionserver is notified that there was a change in the on disk configs.</div>
 </li>
@@ -2459,7 +2472,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>compactedFileDischarger</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.529">compactedFileDischarger</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.530">compactedFileDischarger</a></pre>
 </li>
 </ul>
 <a name="flushThroughputController">
@@ -2468,7 +2481,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>flushThroughputController</h4>
-<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.531">flushThroughputController</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.532">flushThroughputController</a></pre>
 </li>
 </ul>
 <a name="secureBulkLoadManager">
@@ -2477,7 +2490,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>secureBulkLoadManager</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.533">secureBulkLoadManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.534">secureBulkLoadManager</a></pre>
 </li>
 </ul>
 <a name="fsUtilizationChore">
@@ -2486,7 +2499,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>fsUtilizationChore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.html" title="class in org.apache.hadoop.hbase.quotas">FileSystemUtilizationChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.535">fsUtilizationChore</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/FileSystemUtilizationChore.html" title="class in org.apache.hadoop.hbase.quotas">FileSystemUtilizationChore</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.536">fsUtilizationChore</a></pre>
 </li>
 </ul>
 <a name="eventLoopGroupConfig">
@@ -2495,7 +2508,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>eventLoopGroupConfig</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.537">eventLoopGroupConfig</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.538">eventLoopGroupConfig</a></pre>
 </li>
 </ul>
 <a name="namedQueueRecorder">
@@ -2504,7 +2517,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>namedQueueRecorder</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.542">namedQueueRecorder</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.543">namedQueueRecorder</a></pre>
 <div class="block">Provide online slow log responses from ringbuffer</div>
 </li>
 </ul>
@@ -2514,7 +2527,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>masterless</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.551">masterless</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.552">masterless</a></pre>
 <div class="block">True if this RegionServer is coming up in a cluster where there is no Master;
  means it needs to just come up and make do without a Master to talk to: e.g. in test or
  HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only
@@ -2528,7 +2541,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MASTERLESS_CONFIG_NAME</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/regionserver/HRegionServer.html#line.552">MASTERLESS_CONFIG_NAME</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/regionserver/HRegionServer.html#line.553">MASTERLESS_CONFIG_NAME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.HRegionServer.MASTERLESS_CONFIG_NAME">Constant Field Values</a></dd>
@@ -2541,7 +2554,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>REGIONSERVER_CODEC</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/regionserver/HRegionServer.html#line.555">REGIONSERVER_CODEC</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/regionserver/HRegionServer.html#line.556">REGIONSERVER_CODEC</a></pre>
 <div class="block">regionserver codec list</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -2555,7 +2568,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>abortMonitor</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html?is-external=true" title="class or interface in java.util">Timer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.558">abortMonitor</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Timer.html?is-external=true" title="class or interface in java.util">Timer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.559">abortMonitor</a></pre>
 </li>
 </ul>
 <a name="TIMEOUT_REGION_MOVED">
@@ -2564,7 +2577,7 @@
 <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.3501">TIMEOUT_REGION_MOVED</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3516">TIMEOUT_REGION_MOVED</a></pre>
 <div class="block">We need a timeout. If not there is a risk of giving a wrong information: this would double
  the number of network calls instead of reducing them.</div>
 <dl>
@@ -2587,7 +2600,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HRegionServer</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.566">HRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.567">HRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Starts a HRegionServer at the default location.
  <p/>
@@ -2613,7 +2626,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>initNamedQueueRecorder</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.673">initNamedQueueRecorder</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.674">initNamedQueueRecorder</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="getUseThisHostnameInstead-org.apache.hadoop.conf.Configuration-">
@@ -2622,7 +2635,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getUseThisHostnameInstead</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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.692">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.693">getUseThisHostnameInstead</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                                     throws <a href="https://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>
@@ -2636,7 +2649,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setupWindows</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.711">setupWindows</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.712">setupWindows</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;cm)</pre>
 <div class="block">If running on Windows, do windows-specific setup.</div>
 </li>
@@ -2647,7 +2660,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setupNetty</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.720">setupNetty</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.721">setupNetty</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
 </ul>
 <a name="initializeFileSystem--">
@@ -2656,7 +2669,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeFileSystem</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.729">initializeFileSystem</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.730">initializeFileSystem</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>
@@ -2670,7 +2683,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>login</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.746">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.747">login</a>(<a href="../../../../../org/apache/hadoop/hbase/security/UserProvider.html" title="class in org.apache.hadoop.hbase.security">UserProvider</a>&nbsp;user,
                      <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;host)
               throws <a href="https://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>
@@ -2685,7 +2698,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForMasterActive</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.755">waitForMasterActive</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.756">waitForMasterActive</a>()</pre>
 <div class="block">Wait for an active Master.
  See override in Master superclass for how it is used.</div>
 </li>
@@ -2696,7 +2709,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getProcessName</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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.757">getProcessName</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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.758">getProcessName</a>()</pre>
 </li>
 </ul>
 <a name="canCreateBaseZNode--">
@@ -2705,7 +2718,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>canCreateBaseZNode</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.761">canCreateBaseZNode</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.762">canCreateBaseZNode</a>()</pre>
 </li>
 </ul>
 <a name="canUpdateTableDescriptor--">
@@ -2714,7 +2727,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>canUpdateTableDescriptor</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.765">canUpdateTableDescriptor</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.766">canUpdateTableDescriptor</a>()</pre>
 </li>
 </ul>
 <a name="cacheTableDescriptor--">
@@ -2723,7 +2736,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheTableDescriptor</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.769">cacheTableDescriptor</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.770">cacheTableDescriptor</a>()</pre>
 </li>
 </ul>
 <a name="createRpcServices--">
@@ -2732,7 +2745,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRpcServices</h4>
-<pre>protected&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.773">createRpcServices</a>()
+<pre>protected&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.774">createRpcServices</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>
@@ -2746,7 +2759,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>configureInfoServer</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.777">configureInfoServer</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.778">configureInfoServer</a>()</pre>
 </li>
 </ul>
 <a name="getDumpServlet--">
@@ -2755,7 +2768,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDumpServlet</h4>
-<pre>protected&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 javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.782">getDumpServlet</a>()</pre>
+<pre>protected&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 javax.servlet.http.HttpServlet&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.783">getDumpServlet</a>()</pre>
 </li>
 </ul>
 <a name="registerService-org.apache.hbase.thirdparty.com.google.protobuf.Service-">
@@ -2764,7 +2777,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>registerService</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.787">registerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.788">registerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#registerService-org.apache.hbase.thirdparty.com.google.protobuf.Service-">RegionServerServices</a></code></span></div>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to be
  available for handling</div>
@@ -2784,7 +2797,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupConfiguration</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.805">cleanupConfiguration</a>()</pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.806">cleanupConfiguration</a>()</pre>
 </li>
 </ul>
 <a name="checkCodecs-org.apache.hadoop.conf.Configuration-">
@@ -2793,7 +2806,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCodecs</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.828">checkCodecs</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.829">checkCodecs</a>(org.apache.hadoop.conf.Configuration&nbsp;c)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Run test on configured codecs to make sure supporting libs are in place.</div>
 <dl>
@@ -2808,7 +2821,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterId</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.840">getClusterId</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.841">getClusterId</a>()</pre>
 </li>
 </ul>
 <a name="setupClusterConnection--">
@@ -2817,7 +2830,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setupClusterConnection</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.847">setupClusterConnection</a>()
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.848">setupClusterConnection</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 our cluster connection if not already initialized.</div>
 <dl>
@@ -2832,7 +2845,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>preRegistrationInitialization</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.862">preRegistrationInitialization</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.863">preRegistrationInitialization</a>()</pre>
 <div class="block">All initialization needed before we go register with Master.<br>
  Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.<br>
  In here we just put up the RpcServer, setup Connection, and ZooKeeper.</div>
@@ -2844,7 +2857,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeZooKeeper</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.884">initializeZooKeeper</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.885">initializeZooKeeper</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Bring up connection to zk ensemble and then wait until a master for this cluster and then after
@@ -2864,7 +2877,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>blockAndCheckIfStopped</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.937">blockAndCheckIfStopped</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKNodeTracker</a>&nbsp;tracker)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.938">blockAndCheckIfStopped</a>(<a href="../../../../../org/apache/hadoop/hbase/zookeeper/ZKNodeTracker.html" title="class in org.apache.hadoop.hbase.zookeeper">ZKNodeTracker</a>&nbsp;tracker)
                              throws <a href="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">Utilty method to wait indefinitely on a znode availability while checking
@@ -2884,7 +2897,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isClusterUp</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.950">isClusterUp</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.951">isClusterUp</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#isClusterUp--">isClusterUp</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>
@@ -2899,7 +2912,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.959">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.960">run</a>()</pre>
 <div class="block">The HRegionServer sticks in this loop until closed.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -2915,7 +2928,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>containsMetaTableRegions</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1189">containsMetaTableRegions</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1190">containsMetaTableRegions</a>()</pre>
 </li>
 </ul>
 <a name="areAllUserRegionsOffline--">
@@ -2924,7 +2937,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>areAllUserRegionsOffline</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1193">areAllUserRegionsOffline</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1194">areAllUserRegionsOffline</a>()</pre>
 </li>
 </ul>
 <a name="getWriteRequestCount--">
@@ -2933,7 +2946,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriteRequestCount</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1208">getWriteRequestCount</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1209">getWriteRequestCount</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Current write count for all online regions.</dd>
@@ -2946,7 +2959,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>tryRegionServerReport</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1217">tryRegionServerReport</a>(long&nbsp;reportStartTime,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1218">tryRegionServerReport</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>
@@ -2961,7 +2974,7 @@
 <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.1251">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.1252">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>
@@ -2979,7 +2992,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>buildReportAndSend</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1294">buildReportAndSend</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStatusService.BlockingInterface&nbsp;rss,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1295">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
@@ -2999,7 +3012,7 @@
 <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.1311">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.1312">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>
@@ -3015,7 +3028,7 @@
 <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.1327">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.1328">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>
@@ -3034,7 +3047,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>buildServerLoad</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1334">buildServerLoad</a>(long&nbsp;reportStartTime,
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ServerLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1335">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>
@@ -3049,7 +3062,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegionsAsPrintableString</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1413">getOnlineRegionsAsPrintableString</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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1426">getOnlineRegionsAsPrintableString</a>()</pre>
 </li>
 </ul>
 <a name="waitOnAllRegionsToClose-boolean-">
@@ -3058,7 +3071,7 @@
 <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.1425">waitOnAllRegionsToClose</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1438">waitOnAllRegionsToClose</a>(boolean&nbsp;abort)</pre>
 <div class="block">Wait on regions close.</div>
 </li>
 </ul>
@@ -3068,7 +3081,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepInterrupted</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1482">sleepInterrupted</a>(long&nbsp;millis)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1495">sleepInterrupted</a>(long&nbsp;millis)</pre>
 </li>
 </ul>
 <a name="shutdownWAL-boolean-">
@@ -3077,7 +3090,7 @@
 <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.1493">shutdownWAL</a>(boolean&nbsp;close)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1506">shutdownWAL</a>(boolean&nbsp;close)</pre>
 </li>
 </ul>
 <a name="getNamedQueueRecorder--">
@@ -3086,7 +3099,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNamedQueueRecorder</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1514">getNamedQueueRecorder</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/namequeues/NamedQueueRecorder.html" title="class in org.apache.hadoop.hbase.namequeues">NamedQueueRecorder</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1527">getNamedQueueRecorder</a>()</pre>
 <div class="block">get NamedQueue Provider to add different logs to ringbuffer</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -3100,7 +3113,7 @@
 <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.1523">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.1536">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>
@@ -3114,7 +3127,7 @@
 <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.1619">initializeMemStoreChunkCreator</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1632">initializeMemStoreChunkCreator</a>()</pre>
 </li>
 </ul>
 <a name="startHeapMemoryManager--">
@@ -3123,7 +3136,7 @@
 <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.1641">startHeapMemoryManager</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1654">startHeapMemoryManager</a>()</pre>
 </li>
 </ul>
 <a name="createMyEphemeralNode--">
@@ -3132,7 +3145,7 @@
 <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.1649">createMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1662">createMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3146,7 +3159,7 @@
 <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.1657">deleteMyEphemeralNode</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1670">deleteMyEphemeralNode</a>()
                             throws org.apache.zookeeper.KeeperException</pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -3160,7 +3173,7 @@
 <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.1662">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.1675">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>
@@ -3175,7 +3188,7 @@
 <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.1672">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.1685">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>
@@ -3197,7 +3210,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createUserLoad</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.UserLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1754">createUserLoad</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.UserLoad&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1767">createUserLoad</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;user,
                                                                                                       <a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsUserSource.html" title="interface in org.apache.hadoop.hbase.regionserver">MetricsUserSource</a>&nbsp;userSource)</pre>
 </li>
 </ul>
@@ -3207,7 +3220,7 @@
 <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.1767">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.1780">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="throwsLabel">Throws:</span></dt>
@@ -3221,7 +3234,7 @@
 <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.1884">isOnline</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1897">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>
@@ -3237,7 +3250,7 @@
 <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.1892">setupWALAndReplication</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1905">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>
@@ -3253,7 +3266,7 @@
 <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.1923">startReplicationService</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1936">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>
@@ -3268,7 +3281,7 @@
 <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.1940">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.1952">getMasterAddressTracker</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Master address tracker instance.</dd>
@@ -3281,7 +3294,7 @@
 <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.1958">startServices</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.1970">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>
 <div class="block">Start maintenance Threads, Server, Worker and lease checker threads.
  Start all threads we need to run. This is called after we've successfully
@@ -3307,7 +3320,7 @@
 <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.2088">initializeThreads</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2100">initializeThreads</a>()</pre>
 </li>
 </ul>
 <a name="registerConfigurationObservers--">
@@ -3316,7 +3329,7 @@
 <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.2140">registerConfigurationObservers</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2152">registerConfigurationObservers</a>()</pre>
 </li>
 </ul>
 <a name="putUpWebUI--">
@@ -3325,7 +3338,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>putUpWebUI</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2150">putUpWebUI</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2162">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>
@@ -3340,7 +3353,7 @@
 <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.2204">isHealthy</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2216">isHealthy</a>()</pre>
 </li>
 </ul>
 <a name="getWALs--">
@@ -3349,7 +3362,7 @@
 <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.2222">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/regionserver/HRegionServer.html#line.2234">getWALs</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getWALs--">getWALs</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>
@@ -3365,7 +3378,7 @@
 <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.2227">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.2239">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>
@@ -3384,7 +3397,7 @@
 <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.2235">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.2247">getWalRoller</a>()</pre>
 </li>
 </ul>
 <a name="getWalFactory--">
@@ -3393,7 +3406,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalFactory</h4>
-<pre><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/regionserver/HRegionServer.html#line.2239">getWalFactory</a>()</pre>
+<pre><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/regionserver/HRegionServer.html#line.2251">getWalFactory</a>()</pre>
 </li>
 </ul>
 <a name="getConnection--">
@@ -3402,7 +3415,7 @@
 <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.2244">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.2256">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.
 
@@ -3420,7 +3433,7 @@
 <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.2249">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.2261">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>
@@ -3438,7 +3451,7 @@
 <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.2259">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.2271">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>
@@ -3456,7 +3469,7 @@
 <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.2281">waitForServerOnline</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2293">waitForServerOnline</a>()</pre>
 </li>
 </ul>
 <a name="postOpenDeployTasks-org.apache.hadoop.hbase.regionserver.RegionServerServices.PostOpenDeployContext-">
@@ -3465,7 +3478,7 @@
 <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.2295">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.2307">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 <a href="https://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>
 <div class="block">Tasks to perform after region open to complete deploy of region on regionserver</div>
@@ -3485,7 +3498,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>skipReportingTransition</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2335">skipReportingTransition</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>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2347">skipReportingTransition</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">Helper method for use in tests. Skip the region transition report when there's no master
  around to receive it.</div>
 </li>
@@ -3496,7 +3509,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createReportRegionStateTransitionRequest</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2364">createReportRegionStateTransitionRequest</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>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRegionStateTransitionRequest&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2376">createReportRegionStateTransitionRequest</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>
 </li>
 </ul>
 <a name="reportRegionStateTransition-org.apache.hadoop.hbase.regionserver.RegionServerServices.RegionStateTransitionContext-">
@@ -3505,7 +3518,7 @@
 <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.2390">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.2402">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>
@@ -3520,7 +3533,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>triggerFlushInPrimaryRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2455">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>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2467">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>
@@ -3531,7 +3544,7 @@
 <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.2479">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.2491">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>
@@ -3546,7 +3559,7 @@
 <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.2484">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.2496">getRSRpcServices</a>()</pre>
 </li>
 </ul>
 <a name="abort-java.lang.String-java.lang.Throwable-">
@@ -3555,7 +3568,7 @@
 <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.2499">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.2511">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
@@ -3575,7 +3588,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setAbortRequested</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2552">setAbortRequested</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2564">setAbortRequested</a>()</pre>
 <div class="block">Sets the abort state if not already set.</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -3590,7 +3603,7 @@
 <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.2559">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.2571">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>
@@ -3603,7 +3616,7 @@
 <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.2564">isAborted</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2576">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>
@@ -3620,7 +3633,7 @@
 <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.2574">kill</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2586">kill</a>()</pre>
 </li>
 </ul>
 <a name="scheduleAbortTimer--">
@@ -3629,7 +3642,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>scheduleAbortTimer</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2580">scheduleAbortTimer</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2592">scheduleAbortTimer</a>()</pre>
 </li>
 </ul>
 <a name="stopServiceThreads--">
@@ -3638,7 +3651,7 @@
 <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.2603">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2615">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>
@@ -3649,7 +3662,7 @@
 <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.2650">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.2663">getReplicationSourceService</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getReplicationSourceService--">getReplicationSourceService</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>
@@ -3665,7 +3678,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationSinkService</h4>
-<pre>public&nbsp;<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.2657">getReplicationSinkService</a>()</pre>
+<pre>public&nbsp;<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.2670">getReplicationSinkService</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the object that implements the replication sink executorService.</dd>
@@ -3678,7 +3691,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionServerStatusStub</h4>
-<pre>private&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.2669">createRegionServerStatusStub</a>()</pre>
+<pre>private&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.2682">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
@@ -3695,7 +3708,7 @@
 <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.2682">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.2695">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>
@@ -3713,7 +3726,7 @@
 <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.2756">keepLooping</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2769">keepLooping</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if we should break loop because cluster is going down or
@@ -3727,7 +3740,7 @@
 <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.2767">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.2780">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>
@@ -3741,7 +3754,7 @@
 <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.2809">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.2822">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>
@@ -3759,7 +3772,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeMetaTableRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2839">closeMetaTableRegions</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2852">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>
@@ -3773,7 +3786,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeUserRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2862">closeUserRegions</a>(boolean&nbsp;abort)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2875">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>
@@ -3789,7 +3802,7 @@
 <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.2878">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.2891">getInfoServer</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the info server</dd>
@@ -3802,7 +3815,7 @@
 <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.2886">isStopped</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2899">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>
@@ -3817,7 +3830,7 @@
 <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.2891">isStopping</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2904">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>
@@ -3832,7 +3845,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfiguration</h4>
-<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2896">getConfiguration</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2909">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>
@@ -3847,7 +3860,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegions</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/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.2900">getOnlineRegions</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/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.2913">getOnlineRegions</a>()</pre>
 </li>
 </ul>
 <a name="getNumberOfOnlineRegions--">
@@ -3856,7 +3869,7 @@
 <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.2904">getNumberOfOnlineRegions</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2917">getNumberOfOnlineRegions</a>()</pre>
 </li>
 </ul>
 <a name="getOnlineRegionsLocalContext--">
@@ -3865,7 +3878,7 @@
 <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.2913">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.2926">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>
@@ -3877,7 +3890,7 @@
 <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.2919">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.2932">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>
@@ -3892,7 +3905,7 @@
 <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.2924">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.2937">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>
@@ -3903,7 +3916,7 @@
 <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.2935">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.2948">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
@@ -3917,7 +3930,7 @@
 <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.2949">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.2962">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
@@ -3931,7 +3944,7 @@
 <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.2962">getStartcode</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2975">getStartcode</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>time stamp in millis of when this region server was started</dd>
@@ -3944,7 +3957,7 @@
 <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.2968">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.2981">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>
@@ -3959,7 +3972,7 @@
 <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.2973">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.2986">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>
@@ -3975,7 +3988,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getLeaseManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2978">getLeaseManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/LeaseManager.html" title="class in org.apache.hadoop.hbase.regionserver">LeaseManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2991">getLeaseManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getLeaseManager--">getLeaseManager</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>
@@ -3990,7 +4003,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getDataRootDir</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2985">getDataRootDir</a>()</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2998">getDataRootDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the rootDir.</dd>
@@ -4003,7 +4016,7 @@
 <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.2990">getFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3003">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>
@@ -4018,7 +4031,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isDataFileSystemOk</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.2997">isDataFileSystemOk</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3010">isDataFileSystemOk</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>true</code> when the data file system is available, <code>false</code> otherwise.</dd>
@@ -4031,7 +4044,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALRootDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3004">getWALRootDir</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3017">getWALRootDir</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the walRootDir.</dd>
@@ -4044,7 +4057,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALFileSystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3011">getWALFileSystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3024">getWALFileSystem</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>Return the walFs.</dd>
@@ -4057,7 +4070,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3016">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.3029">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/Thread.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/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></code></dd>
@@ -4070,7 +4083,7 @@
 <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.3021">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.3034">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>
@@ -4085,7 +4098,7 @@
 <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.3026">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.3039">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>
@@ -4100,7 +4113,7 @@
 <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.3031">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.3044">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>
@@ -4115,7 +4128,7 @@
 <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.3035">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.3048">getRegionServerCoprocessorHost</a>()</pre>
 </li>
 </ul>
 <a name="getRegionsInTransitionInRS--">
@@ -4124,7 +4137,7 @@
 <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.3040">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.3053">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>
@@ -4141,7 +4154,7 @@
 <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.3045">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.3058">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>
@@ -4156,7 +4169,7 @@
 <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.3050">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.3063">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>
@@ -4171,7 +4184,7 @@
 <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.3055">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.3068">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>
@@ -4186,7 +4199,7 @@
 <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.3065">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.3078">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,
@@ -4206,7 +4219,7 @@
 <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.3089">newReplicationInstance</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;classname,
+<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.3104">newReplicationInstance</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;classname,
                                                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;T&gt;&nbsp;xface,
                                                                        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,
@@ -4227,7 +4240,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalGroupsReplicationStatus</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationStatus.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationStatus</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3104">getWalGroupsReplicationStatus</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationStatus.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationStatus</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3119">getWalGroupsReplicationStatus</a>()</pre>
 </li>
 </ul>
 <a name="constructRegionServer-java.lang.Class-org.apache.hadoop.conf.Configuration-">
@@ -4236,7 +4249,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>constructRegionServer</h4>
-<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3121">constructRegionServer</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/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&gt;&nbsp;regionServerClass,
+<pre>static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3136">constructRegionServer</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/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer</a>&gt;&nbsp;regionServerClass,
                                            org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">Utility for constructing an instance of the passed HRegionServer class.</div>
 </li>
@@ -4247,7 +4260,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3138">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3153">main</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegionServerCommandLine</code></a></dd>
@@ -4260,7 +4273,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegions</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/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.3160">getRegions</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/util/List.html?is-external=true" title="class or interface in java.util">List</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.3175">getRegions</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Gets the online regions of the specified table.
  This method looks at the in-memory onlineRegions.  It does not go to <code>hbase:meta</code>.
  Only returns <em>online</em> regions.  If a region on this table has been
@@ -4283,7 +4296,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegions</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/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.3174">getRegions</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/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.3189">getRegions</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/OnlineRegions.html#getRegions--">OnlineRegions</a></code></span></div>
 <div class="block">Get all online regions in this RS.</div>
 <dl>
@@ -4300,7 +4313,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineTables</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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3188">getOnlineTables</a>()</pre>
+<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/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3203">getOnlineTables</a>()</pre>
 <div class="block">Gets the online tables in this RS.
  This method looks at the in-memory onlineRegions.</div>
 <dl>
@@ -4315,7 +4328,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerCoprocessors</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.3198">getRegionServerCoprocessors</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.3213">getRegionServerCoprocessors</a>()</pre>
 </li>
 </ul>
 <a name="closeRegionIgnoreErrors-org.apache.hadoop.hbase.client.RegionInfo-boolean-">
@@ -4324,7 +4337,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionIgnoreErrors</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3226">closeRegionIgnoreErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3241">closeRegionIgnoreErrors</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;region,
                                      boolean&nbsp;abort)</pre>
 <div class="block">Try to close the region, logs a warning on failure but continues.</div>
 <dl>
@@ -4339,7 +4352,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegion</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3257">closeRegion</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;encodedName,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3272">closeRegion</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;encodedName,
                               boolean&nbsp;abort,
                               <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination)
                        throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
@@ -4372,7 +4385,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getOnlineRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3325">getOnlineRegion</a>(byte[]&nbsp;regionName)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3340">getOnlineRegion</a>(byte[]&nbsp;regionName)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>HRegion for the passed binary <code>regionName</code> or null if
@@ -4386,7 +4399,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3331">getRegion</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>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3346">getRegion</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>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/OnlineRegions.html#getRegion-java.lang.String-">OnlineRegions</a></code></span></div>
 <div class="block">Return <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver"><code>Region</code></a> instance.
  Only works if caller is in same context, in same JVM. Region is not
@@ -4406,7 +4419,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>removeRegion</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3337">removeRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3352">removeRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;r,
                             <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/MutableOnlineRegions.html#removeRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.ServerName-">MutableOnlineRegions</a></code></span></div>
 <div class="block">Removes the given Region from the list of onlineRegions.</div>
@@ -4427,7 +4440,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegion</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3365">getRegion</a>(byte[]&nbsp;regionName)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3380">getRegion</a>(byte[]&nbsp;regionName)
                      throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
 <div class="block">Protected Utility method for safely obtaining an HRegion handle.</div>
 <dl>
@@ -4446,7 +4459,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionByEncodedName</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3371">getRegionByEncodedName</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;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3386">getRegionByEncodedName</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="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -4460,7 +4473,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionByEncodedName</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3376">getRegionByEncodedName</a>(byte[]&nbsp;regionName,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3391">getRegionByEncodedName</a>(byte[]&nbsp;regionName,
                                        <a href="https://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="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a></pre>
 <dl>
@@ -4475,7 +4488,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanup</h4>
-<pre>private&nbsp;<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;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3405">cleanup</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;t,
+<pre>private&nbsp;<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;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3420">cleanup</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;t,
                           <a href="https://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">Cleanup after Throwable caught invoking method. Converts <code>t</code> to
  IOE if it isn't already.</div>
@@ -4494,7 +4507,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>convertThrowableToIOE</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3427">convertThrowableToIOE</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;t,
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3442">convertThrowableToIOE</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;t,
                                           <a href="https://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>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -4510,7 +4523,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFileSystem</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3438">checkFileSystem</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3453">checkFileSystem</a>()</pre>
 <div class="block">Checks to see if the file system is still accessible. If not, sets
  abortRequested and stopRequested</div>
 <dl>
@@ -4525,7 +4538,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>updateRegionFavoredNodesMapping</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3451">updateRegionFavoredNodesMapping</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;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3466">updateRegionFavoredNodesMapping</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,
                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt;&nbsp;favoredNodes)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.html#updateRegionFavoredNodesMapping-java.lang.String-java.util.List-">FavoredNodesForRegion</a></code></span></div>
 <div class="block">Used to update the favored nodes mapping when required.</div>
@@ -4541,7 +4554,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFavoredNodesForRegion</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3470">getFavoredNodesForRegion</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>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/net/InetSocketAddress.html?is-external=true" title="class or interface in java.net">InetSocketAddress</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3485">getFavoredNodesForRegion</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>
 <div class="block">Return the favored nodes for a region given its encoded name. Look at the
  comment around <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#regionFavoredNodesMap"><code>regionFavoredNodesMap</code></a> on why it is InetSocketAddress[]</div>
 <dl>
@@ -4558,7 +4571,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3475">getNonceManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ServerNonceManager.html" title="class in org.apache.hadoop.hbase.regionserver">ServerNonceManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3490">getNonceManager</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getNonceManager--">RegionServerServices</a></code></span></div>
 <div class="block">Only required for "old" log replay; if it's removed, remove this.</div>
 <dl>
@@ -4575,7 +4588,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>addToMovedRegions</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3503">addToMovedRegions</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;encodedName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3518">addToMovedRegions</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;encodedName,
                                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;destination,
                                long&nbsp;closeSeqNum,
                                boolean&nbsp;selfMove)</pre>
@@ -4587,7 +4600,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>removeFromMovedRegions</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3513">removeFromMovedRegions</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;encodedName)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3528">removeFromMovedRegions</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;encodedName)</pre>
 </li>
 </ul>
 <a name="getMovedRegion-java.lang.String-">
@@ -4596,7 +4609,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMovedRegion</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3518">getMovedRegion</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>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.MovedRegionInfo.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionServer.MovedRegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3533">getMovedRegion</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>
 </li>
 </ul>
 <a name="movedRegionCacheExpiredTime--">
@@ -4605,7 +4618,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>movedRegionCacheExpiredTime</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3523">movedRegionCacheExpiredTime</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3538">movedRegionCacheExpiredTime</a>()</pre>
 </li>
 </ul>
 <a name="getMyEphemeralNodePath--">
@@ -4614,7 +4627,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMyEphemeralNodePath</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3527">getMyEphemeralNodePath</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>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3542">getMyEphemeralNodePath</a>()</pre>
 </li>
 </ul>
 <a name="isHealthCheckerConfigured--">
@@ -4623,7 +4636,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isHealthCheckerConfigured</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3531">isHealthCheckerConfigured</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3546">isHealthCheckerConfigured</a>()</pre>
 </li>
 </ul>
 <a name="getCompactSplitThread--">
@@ -4632,7 +4645,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactSplitThread</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3539">getCompactSplitThread</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver">CompactSplit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3554">getCompactSplitThread</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the underlying <a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactSplit.html" title="class in org.apache.hadoop.hbase.regionserver"><code>CompactSplit</code></a> for the servers</dd>
@@ -4645,7 +4658,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>execRegionServerService</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3543">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceResponse&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3558">execRegionServerService</a>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
                                                                                                                   org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceRequest&nbsp;serviceRequest)
                                                                                                            throws org.apache.hbase.thirdparty.com.google.protobuf.ServiceException</pre>
 <dl>
@@ -4660,7 +4673,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCache</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/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3591">getBlockCache</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/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3606">getBlockCache</a>()</pre>
 <div class="block">May be null if this is a master which not carry table.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4676,7 +4689,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFileCache</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/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3601">getMobFileCache</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/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3616">getMobFileCache</a>()</pre>
 <div class="block">May be null if this is a master which not carry table.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -4692,7 +4705,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAccessChecker</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3606">getAccessChecker</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/AccessChecker.html" title="class in org.apache.hadoop.hbase.security.access">AccessChecker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3621">getAccessChecker</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getAccessChecker--">getAccessChecker</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>
@@ -4707,7 +4720,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getZKPermissionWatcher</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3611">getZKPermissionWatcher</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/security/access/ZKPermissionWatcher.html" title="class in org.apache.hadoop.hbase.security.access">ZKPermissionWatcher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3626">getZKPermissionWatcher</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getZKPermissionWatcher--">getZKPermissionWatcher</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>
@@ -4722,7 +4735,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getConfigurationManager</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3619">getConfigurationManager</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3634">getConfigurationManager</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>: Returns the ConfigurationManager object for testing purposes.</dd>
@@ -4735,7 +4748,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptors</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3627">getTableDescriptors</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase">TableDescriptors</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3642">getTableDescriptors</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getTableDescriptors--">getTableDescriptors</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>
@@ -4750,7 +4763,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>updateConfiguration</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3634">updateConfiguration</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3649">updateConfiguration</a>()</pre>
 <div class="block">Reload the configuration from disk.</div>
 </li>
 </ul>
@@ -4760,7 +4773,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>clearRegionBlockCache</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3641">clearRegionBlockCache</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/CacheEvictionStats.html" title="class in org.apache.hadoop.hbase">CacheEvictionStats</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3656">clearRegionBlockCache</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;region)</pre>
 </li>
 </ul>
 <a name="getCompactionPressure--">
@@ -4769,7 +4782,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionPressure</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3656">getCompactionPressure</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3671">getCompactionPressure</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getCompactionPressure--">getCompactionPressure</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>
@@ -4788,7 +4801,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getHeapMemoryManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3670">getHeapMemoryManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HeapMemoryManager.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemoryManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3685">getHeapMemoryManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getHeapMemoryManager--">getHeapMemoryManager</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>
@@ -4803,7 +4816,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreFlusher</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3674">getMemStoreFlusher</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreFlusher.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreFlusher</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3689">getMemStoreFlusher</a>()</pre>
 </li>
 </ul>
 <a name="walRollRequestFinished--">
@@ -4812,7 +4825,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>walRollRequestFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3683">walRollRequestFinished</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3698">walRollRequestFinished</a>()</pre>
 <div class="block">For testing</div>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4826,7 +4839,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushThroughputController</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3688">getFlushThroughputController</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3703">getFlushThroughputController</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushThroughputController--">getFlushThroughputController</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>
@@ -4841,7 +4854,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getFlushPressure</h4>
-<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3693">getFlushPressure</a>()</pre>
+<pre>public&nbsp;double&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3708">getFlushPressure</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getFlushPressure--">getFlushPressure</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>
@@ -4858,7 +4871,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3702">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3717">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;newConf)</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>
@@ -4874,7 +4887,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getMetrics</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.3716">getMetrics</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.3731">getMetrics</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getMetrics--">getMetrics</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>
@@ -4889,7 +4902,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSecureBulkLoadManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3721">getSecureBulkLoadManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/SecureBulkLoadManager.html" title="class in org.apache.hadoop.hbase.regionserver">SecureBulkLoadManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3736">getSecureBulkLoadManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getSecureBulkLoadManager--">getSecureBulkLoadManager</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>
@@ -4904,7 +4917,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>regionLock</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3726">regionLock</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;regionInfo,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/locking/EntityLock.html" title="class in org.apache.hadoop.hbase.client.locking">EntityLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3741">regionLock</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;regionInfo,
                              <a href="https://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,
                              <a href="../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a>&nbsp;abort)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#regionLock-java.util.List-java.lang.String-org.apache.hadoop.hbase.Abortable-">RegionServerServices</a></code></span></div>
@@ -4921,7 +4934,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>unassign</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3734">unassign</a>(byte[]&nbsp;regionName)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3749">unassign</a>(byte[]&nbsp;regionName)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#unassign-byte:A-">RegionServerServices</a></code></span></div>
 <div class="block">Unassign the given region from the current regionserver and assign it randomly. Could still be
@@ -4944,7 +4957,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionServerSpaceQuotaManager</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3739">getRegionServerSpaceQuotaManager</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/quotas/RegionServerSpaceQuotaManager.html" title="class in org.apache.hadoop.hbase.quotas">RegionServerSpaceQuotaManager</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3754">getRegionServerSpaceQuotaManager</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#getRegionServerSpaceQuotaManager--">getRegionServerSpaceQuotaManager</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>
@@ -4959,7 +4972,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>reportFileArchivalForQuotas</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3744">reportFileArchivalForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3759">reportFileArchivalForQuotas</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                            <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&gt;&nbsp;archivedFiles)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionServerServices.html#reportFileArchivalForQuotas-org.apache.hadoop.hbase.TableName-java.util.Collection-">RegionServerServices</a></code></span></div>
 <div class="block">Reports a collection of files, and their sizes, that belonged to the given <code>table</code> were
@@ -4981,7 +4994,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getEventLoopGroupConfig</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3777">getEventLoopGroupConfig</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/NettyEventLoopGroupConfig.html" title="class in org.apache.hadoop.hbase.util">NettyEventLoopGroupConfig</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3792">getEventLoopGroupConfig</a>()</pre>
 </li>
 </ul>
 <a name="createConnection-org.apache.hadoop.conf.Configuration-">
@@ -4990,7 +5003,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createConnection</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.3782">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<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.3797">createConnection</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                             throws <a href="https://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>
@@ -5006,7 +5019,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>executeProcedure</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3787">executeProcedure</a>(long&nbsp;procId,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3802">executeProcedure</a>(long&nbsp;procId,
                       <a href="../../../../../org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a>&nbsp;callable)</pre>
 </li>
 </ul>
@@ -5016,7 +5029,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>remoteProcedureComplete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3791">remoteProcedureComplete</a>(long&nbsp;procId,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3806">remoteProcedureComplete</a>(long&nbsp;procId,
                                     <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;error)</pre>
 </li>
 </ul>
@@ -5026,7 +5039,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>reportProcedureDone</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3795">reportProcedureDone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest&nbsp;request)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3810">reportProcedureDone</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportProcedureDoneRequest&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>
@@ -5040,7 +5053,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>submitRegionProcedure</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3833">submitRegionProcedure</a>(long&nbsp;procId)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3848">submitRegionProcedure</a>(long&nbsp;procId)</pre>
 <div class="block">Will ignore the open/close region procedures which already submitted or executed.
 
  When master had unfinished open/close region procedure and restarted, new active master may
@@ -5068,7 +5081,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>finishRegionProcedure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3855">finishRegionProcedure</a>(long&nbsp;procId)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3870">finishRegionProcedure</a>(long&nbsp;procId)</pre>
 <div class="block">See <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html#submitRegionProcedure-long-"><code>submitRegionProcedure(long)</code></a>.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -5082,7 +5095,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isShutDown</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3860">isShutDown</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3875">isShutDown</a>()</pre>
 </li>
 </ul>
 <a name="getAsyncClusterConnection--">
@@ -5091,7 +5104,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getAsyncClusterConnection</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3883">getAsyncClusterConnection</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">AsyncClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3898">getAsyncClusterConnection</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/Server.html#getAsyncClusterConnection--">Server</a></code></span></div>
 <div class="block">Returns a reference to the servers' async cluster connection.
  <p/>
@@ -5109,7 +5122,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getCompactedHFilesDischarger</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3888">getCompactedHFilesDischarger</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.html" title="class in org.apache.hadoop.hbase.regionserver">CompactedHFilesDischarger</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html#line.3903">getCompactedHFilesDischarger</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ReplicationService.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ReplicationService.html
index b631aaa..5b85cb6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ReplicationService.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ReplicationService.html
@@ -105,7 +105,7 @@
 </dl>
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a>, <a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html b/devapidocs/org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html
index 08a0ceb..1a13557 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html
@@ -105,7 +105,7 @@
 </dl>
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dd>
+<dd><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dd>
 </dl>
 <hr>
 <br>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ReplicationService.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ReplicationService.html
index 43ed8a3..8f537b8 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ReplicationService.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ReplicationService.html
@@ -87,6 +87,12 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
+<td class="colLast">
+<div class="block">Multi Cluster Replication</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -141,6 +147,24 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a> in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> that implement <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ReplicationSinkService.html b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ReplicationSinkService.html
index 0f93e03..baedc5e 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ReplicationSinkService.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/class-use/ReplicationSinkService.html
@@ -87,8 +87,10 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
+<td class="colLast">
+<div class="block">Multi Cluster Replication</div>
+</td>
 </tr>
 </tbody>
 </table>
@@ -126,12 +128,12 @@
 </tbody>
 </table>
 </li>
-<li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
 <!--   -->
 </a>
-<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a> in <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></h3>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a> in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></h3>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
-<caption><span>Classes in <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a> that implement <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></span><span class="tabEnd">&nbsp;</span></caption>
+<caption><span>Classes in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> that implement <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>
 <th class="colLast" scope="col">Class and Description</th>
@@ -139,9 +141,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></span></code>
-<div class="block">Gateway to Replication.</div>
-</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index f045014..70c9d0b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -733,20 +733,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.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/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/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/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.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/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/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/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/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/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/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/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/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/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/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/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/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/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/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
+<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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html
index a2340b3..94ff511 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-use.html
@@ -220,41 +220,47 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
+<td class="colLast">
+<div class="block">Multi Cluster Replication</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.security.access">org.apache.hadoop.hbase.security.access</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.security.visibility">org.apache.hadoop.hbase.security.visibility</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.snapshot">org.apache.hadoop.hbase.snapshot</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.thrift2">org.apache.hadoop.hbase.thrift2</a></td>
 <td class="colLast">
 <div class="block">Provides an HBase <a href="http://thrift.apache.org/">Thrift</a>
 service.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.tool">org.apache.hadoop.hbase.tool</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.util.compaction">org.apache.hadoop.hbase.util.compaction</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -2193,6 +2199,28 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
+<!--   -->
+</a>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing classes, and an explanation">
+<caption><span>Classes in <a href="../../../../../org/apache/hadoop/hbase/regionserver/package-summary.html">org.apache.hadoop.hbase.regionserver</a> used by <a href="../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Class and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReplicationService.html#org.apache.hadoop.hbase.replication">ReplicationService</a>
+<div class="block">Gateway to Cluster Replication.</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReplicationSinkService.html#org.apache.hadoop.hbase.replication">ReplicationSinkService</a>
+<div class="block">A sink for a replication stream has to expose this service.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
 <!--   -->
 </a>
@@ -2213,11 +2241,6 @@
 </td>
 </tr>
 <tr class="altColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReplicationSinkService.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSinkService</a>
-<div class="block">A sink for a replication stream has to expose this service.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/regionserver/class-use/ReplicationSourceService.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceService</a>
 <div class="block">A source for a replication stream has to expose this service.</div>
 </td>
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 a1142ed..dd8850d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -131,8 +131,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/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/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html
index 68a3dac..7074778 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html
@@ -114,7 +114,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.39">MetricsWAL</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.40">MetricsWAL</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/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a></pre>
 <div class="block">Class used to push numbers about the WAL into the metrics subsystem.  This will take a
@@ -252,7 +252,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.40">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.41">LOG</a></pre>
 </li>
 </ul>
 <a name="source">
@@ -261,7 +261,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>source</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.42">source</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.43">source</a></pre>
 </li>
 </ul>
 </li>
@@ -278,7 +278,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MetricsWAL</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.44">MetricsWAL</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.45">MetricsWAL</a>()</pre>
 </li>
 </ul>
 <a name="MetricsWAL-org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource-">
@@ -287,7 +287,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetricsWAL</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.49">MetricsWAL</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a>&nbsp;s)</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.50">MetricsWAL</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a>&nbsp;s)</pre>
 </li>
 </ul>
 </li>
@@ -304,7 +304,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>postSync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.54">postSync</a>(long&nbsp;timeInNanos,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.55">postSync</a>(long&nbsp;timeInNanos,
                      int&nbsp;handlerSyncs)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html#postSync-long-int-">WALActionsListener</a></code></span></div>
 <div class="block">For notification post writer sync.  Used by metrics system at least.</div>
@@ -324,7 +324,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>postAppend</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.59">postAppend</a>(long&nbsp;size,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.60">postAppend</a>(long&nbsp;size,
                        long&nbsp;time,
                        <a href="../../../../../../org/apache/hadoop/hbase/wal/WALKey.html" title="interface in org.apache.hadoop.hbase.wal">WALKey</a>&nbsp;logkey,
                        <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;logEdit)
@@ -351,7 +351,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logRollRequested</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.76">logRollRequested</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener.RollRequestReason</a>&nbsp;reason)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html#line.78">logRollRequested</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener.RollRequestReason</a>&nbsp;reason)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html#logRollRequested-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.RollRequestReason-">WALActionsListener</a></code></span></div>
 <div class="block">A request was made that the WAL be rolled.</div>
 <dl>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html
index 941ed69..531390c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.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":6,"i10":6,"i11":6,"i12":6};
+var methods = {"i0":6,"i1":6,"i2":6,"i3":6,"i4":6,"i5":6,"i6":6,"i7":6,"i8":6,"i9":6,"i10":6,"i11":6};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -110,7 +110,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.28">MetricsWALSource</a>
+public interface <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.29">MetricsWALSource</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSource.html" title="interface in org.apache.hadoop.hbase.metrics">BaseSource</a></pre>
 <div class="block">Interface of the source that will export metrics about the region server's WAL.</div>
 </li>
@@ -270,60 +270,57 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#getSlowAppendCount--">getSlowAppendCount</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#getWrittenBytes--">getWrittenBytes</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendCount--">incrementAppendCount</a></span>()</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendCount-org.apache.hadoop.hbase.TableName-">incrementAppendCount</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Increment the count of wal appends</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-long-">incrementAppendSize</a></span>(long&nbsp;size)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">incrementAppendSize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                   long&nbsp;size)</code>
 <div class="block">Add the append size.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendTime-long-">incrementAppendTime</a></span>(long&nbsp;time)</code>
 <div class="block">Add the time it took to append.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementErrorLogRoll--">incrementErrorLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementLogRollRequested--">incrementLogRollRequested</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementLowReplicationLogRoll--">incrementLowReplicationLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementSizeLogRoll--">incrementSizeLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementSlowAppendCount--">incrementSlowAppendCount</a></span>()</code>
 <div class="block">Increment the number of appends that were slow</div>
 </td>
 </tr>
-<tr id="i10" 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/regionserver/wal/MetricsWALSource.html#incrementSlowSyncLogRoll--">incrementSlowSyncLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" 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/regionserver/wal/MetricsWALSource.html#incrementSyncTime-long-">incrementSyncTime</a></span>(long&nbsp;time)</code>
 <div class="block">Add the time it took to sync the wal.</div>
 </td>
 </tr>
-<tr id="i12" 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/regionserver/wal/MetricsWALSource.html#incrementWrittenBytes-long-">incrementWrittenBytes</a></span>(long&nbsp;val)</code>&nbsp;</td>
 </tr>
@@ -355,7 +352,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>METRICS_NAME</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/regionserver/wal/MetricsWALSource.html#line.34">METRICS_NAME</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/regionserver/wal/MetricsWALSource.html#line.35">METRICS_NAME</a></pre>
 <div class="block">The name of the metrics</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -369,7 +366,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>METRICS_CONTEXT</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/regionserver/wal/MetricsWALSource.html#line.39">METRICS_CONTEXT</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/regionserver/wal/MetricsWALSource.html#line.40">METRICS_CONTEXT</a></pre>
 <div class="block">The name of the metrics context that metrics will be under.</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -383,7 +380,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>METRICS_DESCRIPTION</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/regionserver/wal/MetricsWALSource.html#line.44">METRICS_DESCRIPTION</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/regionserver/wal/MetricsWALSource.html#line.45">METRICS_DESCRIPTION</a></pre>
 <div class="block">Description</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -397,7 +394,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>METRICS_JMX_CONTEXT</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/regionserver/wal/MetricsWALSource.html#line.49">METRICS_JMX_CONTEXT</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/regionserver/wal/MetricsWALSource.html#line.50">METRICS_JMX_CONTEXT</a></pre>
 <div class="block">The name of the metrics context that metrics will be under in jmx</div>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
@@ -411,7 +408,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>APPEND_TIME</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/regionserver/wal/MetricsWALSource.html#line.52">APPEND_TIME</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/regionserver/wal/MetricsWALSource.html#line.53">APPEND_TIME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.APPEND_TIME">Constant Field Values</a></dd>
@@ -424,7 +421,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>APPEND_TIME_DESC</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/regionserver/wal/MetricsWALSource.html#line.53">APPEND_TIME_DESC</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/regionserver/wal/MetricsWALSource.html#line.54">APPEND_TIME_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.APPEND_TIME_DESC">Constant Field Values</a></dd>
@@ -437,7 +434,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>APPEND_COUNT</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/regionserver/wal/MetricsWALSource.html#line.54">APPEND_COUNT</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/regionserver/wal/MetricsWALSource.html#line.55">APPEND_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.APPEND_COUNT">Constant Field Values</a></dd>
@@ -450,7 +447,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>APPEND_COUNT_DESC</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/regionserver/wal/MetricsWALSource.html#line.55">APPEND_COUNT_DESC</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/regionserver/wal/MetricsWALSource.html#line.56">APPEND_COUNT_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.APPEND_COUNT_DESC">Constant Field Values</a></dd>
@@ -463,7 +460,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>APPEND_SIZE</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/regionserver/wal/MetricsWALSource.html#line.56">APPEND_SIZE</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/regionserver/wal/MetricsWALSource.html#line.57">APPEND_SIZE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.APPEND_SIZE">Constant Field Values</a></dd>
@@ -476,7 +473,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>APPEND_SIZE_DESC</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/regionserver/wal/MetricsWALSource.html#line.57">APPEND_SIZE_DESC</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/regionserver/wal/MetricsWALSource.html#line.58">APPEND_SIZE_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.APPEND_SIZE_DESC">Constant Field Values</a></dd>
@@ -489,7 +486,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_APPEND_COUNT</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/regionserver/wal/MetricsWALSource.html#line.58">SLOW_APPEND_COUNT</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/regionserver/wal/MetricsWALSource.html#line.59">SLOW_APPEND_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.SLOW_APPEND_COUNT">Constant Field Values</a></dd>
@@ -502,7 +499,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_APPEND_COUNT_DESC</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/regionserver/wal/MetricsWALSource.html#line.59">SLOW_APPEND_COUNT_DESC</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/regionserver/wal/MetricsWALSource.html#line.60">SLOW_APPEND_COUNT_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.SLOW_APPEND_COUNT_DESC">Constant Field Values</a></dd>
@@ -515,7 +512,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SYNC_TIME</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/regionserver/wal/MetricsWALSource.html#line.60">SYNC_TIME</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/regionserver/wal/MetricsWALSource.html#line.61">SYNC_TIME</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.SYNC_TIME">Constant Field Values</a></dd>
@@ -528,7 +525,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SYNC_TIME_DESC</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/regionserver/wal/MetricsWALSource.html#line.61">SYNC_TIME_DESC</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/regionserver/wal/MetricsWALSource.html#line.62">SYNC_TIME_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.SYNC_TIME_DESC">Constant Field Values</a></dd>
@@ -541,7 +538,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.62">ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.63">ROLL_REQUESTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.ROLL_REQUESTED">Constant Field Values</a></dd>
@@ -554,7 +551,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.63">ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.64">ROLL_REQUESTED_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.ROLL_REQUESTED_DESC">Constant Field Values</a></dd>
@@ -567,7 +564,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ERROR_ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.64">ERROR_ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.65">ERROR_ROLL_REQUESTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.ERROR_ROLL_REQUESTED">Constant Field Values</a></dd>
@@ -580,7 +577,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>ERROR_ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.65">ERROR_ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.66">ERROR_ROLL_REQUESTED_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.ERROR_ROLL_REQUESTED_DESC">Constant Field Values</a></dd>
@@ -593,7 +590,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOW_REPLICA_ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.67">LOW_REPLICA_ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.68">LOW_REPLICA_ROLL_REQUESTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.LOW_REPLICA_ROLL_REQUESTED">Constant Field Values</a></dd>
@@ -606,7 +603,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOW_REPLICA_ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.68">LOW_REPLICA_ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.69">LOW_REPLICA_ROLL_REQUESTED_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.LOW_REPLICA_ROLL_REQUESTED_DESC">Constant Field Values</a></dd>
@@ -619,7 +616,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_SYNC_ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.70">SLOW_SYNC_ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.71">SLOW_SYNC_ROLL_REQUESTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.SLOW_SYNC_ROLL_REQUESTED">Constant Field Values</a></dd>
@@ -632,7 +629,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_SYNC_ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.71">SLOW_SYNC_ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.72">SLOW_SYNC_ROLL_REQUESTED_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.SLOW_SYNC_ROLL_REQUESTED_DESC">Constant Field Values</a></dd>
@@ -645,7 +642,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SIZE_ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.73">SIZE_ROLL_REQUESTED</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/regionserver/wal/MetricsWALSource.html#line.74">SIZE_ROLL_REQUESTED</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.SIZE_ROLL_REQUESTED">Constant Field Values</a></dd>
@@ -658,7 +655,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>SIZE_ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.74">SIZE_ROLL_REQUESTED_DESC</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/regionserver/wal/MetricsWALSource.html#line.75">SIZE_ROLL_REQUESTED_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.SIZE_ROLL_REQUESTED_DESC">Constant Field Values</a></dd>
@@ -671,7 +668,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>WRITTEN_BYTES</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/regionserver/wal/MetricsWALSource.html#line.76">WRITTEN_BYTES</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/regionserver/wal/MetricsWALSource.html#line.77">WRITTEN_BYTES</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.WRITTEN_BYTES">Constant Field Values</a></dd>
@@ -684,7 +681,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WRITTEN_BYTES_DESC</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/regionserver/wal/MetricsWALSource.html#line.77">WRITTEN_BYTES_DESC</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/regionserver/wal/MetricsWALSource.html#line.78">WRITTEN_BYTES_DESC</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource.WRITTEN_BYTES_DESC">Constant Field Values</a></dd>
@@ -699,13 +696,14 @@
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="incrementAppendSize-long-">
+<a name="incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementAppendSize</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.82">incrementAppendSize</a>(long&nbsp;size)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.83">incrementAppendSize</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                         long&nbsp;size)</pre>
 <div class="block">Add the append size.</div>
 </li>
 </ul>
@@ -715,17 +713,17 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementAppendTime</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.87">incrementAppendTime</a>(long&nbsp;time)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.88">incrementAppendTime</a>(long&nbsp;time)</pre>
 <div class="block">Add the time it took to append.</div>
 </li>
 </ul>
-<a name="incrementAppendCount--">
+<a name="incrementAppendCount-org.apache.hadoop.hbase.TableName-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementAppendCount</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.92">incrementAppendCount</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.93">incrementAppendCount</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</pre>
 <div class="block">Increment the count of wal appends</div>
 </li>
 </ul>
@@ -735,7 +733,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSlowAppendCount</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.97">incrementSlowAppendCount</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.98">incrementSlowAppendCount</a>()</pre>
 <div class="block">Increment the number of appends that were slow</div>
 </li>
 </ul>
@@ -745,7 +743,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSyncTime</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.102">incrementSyncTime</a>(long&nbsp;time)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.103">incrementSyncTime</a>(long&nbsp;time)</pre>
 <div class="block">Add the time it took to sync the wal.</div>
 </li>
 </ul>
@@ -755,7 +753,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementLogRollRequested</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.104">incrementLogRollRequested</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.105">incrementLogRollRequested</a>()</pre>
 </li>
 </ul>
 <a name="incrementErrorLogRoll--">
@@ -764,7 +762,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementErrorLogRoll</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.106">incrementErrorLogRoll</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.107">incrementErrorLogRoll</a>()</pre>
 </li>
 </ul>
 <a name="incrementLowReplicationLogRoll--">
@@ -773,7 +771,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementLowReplicationLogRoll</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.108">incrementLowReplicationLogRoll</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.109">incrementLowReplicationLogRoll</a>()</pre>
 </li>
 </ul>
 <a name="getSlowAppendCount--">
@@ -782,7 +780,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSlowAppendCount</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.110">getSlowAppendCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.111">getSlowAppendCount</a>()</pre>
 </li>
 </ul>
 <a name="incrementSlowSyncLogRoll--">
@@ -791,7 +789,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSlowSyncLogRoll</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.112">incrementSlowSyncLogRoll</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.113">incrementSlowSyncLogRoll</a>()</pre>
 </li>
 </ul>
 <a name="incrementSizeLogRoll--">
@@ -800,25 +798,16 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSizeLogRoll</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.114">incrementSizeLogRoll</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.115">incrementSizeLogRoll</a>()</pre>
 </li>
 </ul>
 <a name="incrementWrittenBytes-long-">
 <!--   -->
 </a>
-<ul class="blockList">
-<li class="blockList">
-<h4>incrementWrittenBytes</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.116">incrementWrittenBytes</a>(long&nbsp;val)</pre>
-</li>
-</ul>
-<a name="getWrittenBytes--">
-<!--   -->
-</a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getWrittenBytes</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.118">getWrittenBytes</a>()</pre>
+<h4>incrementWrittenBytes</h4>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#line.117">incrementWrittenBytes</a>(long&nbsp;val)</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html
index 92152a5..73153ca 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.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};
+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};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -119,7 +119,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.33">MetricsWALSourceImpl</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.36">MetricsWALSourceImpl</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/metrics/BaseSourceImpl.html" title="class in org.apache.hadoop.hbase.metrics">BaseSourceImpl</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></pre>
 <div class="block">Class that transitions metrics from MetricsWAL into the metrics subsystem.
@@ -172,6 +172,14 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#lowReplicationRollRequested">lowReplicationRollRequested</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/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#perTableAppendCount">perTableAppendCount</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/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#perTableAppendSize">perTableAppendSize</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#sizeRollRequested">sizeRollRequested</a></span></code>&nbsp;</td>
 </tr>
@@ -255,60 +263,57 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#getSlowAppendCount--">getSlowAppendCount</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#getWrittenBytes--">getWrittenBytes</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendCount--">incrementAppendCount</a></span>()</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendCount-org.apache.hadoop.hbase.TableName-">incrementAppendCount</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Increment the count of wal appends</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendSize-long-">incrementAppendSize</a></span>(long&nbsp;size)</code>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">incrementAppendSize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                   long&nbsp;size)</code>
 <div class="block">Add the append size.</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementAppendTime-long-">incrementAppendTime</a></span>(long&nbsp;time)</code>
 <div class="block">Add the time it took to append.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementErrorLogRoll--">incrementErrorLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementLogRollRequested--">incrementLogRollRequested</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementLowReplicationLogRoll--">incrementLowReplicationLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementSizeLogRoll--">incrementSizeLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i9" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#incrementSlowAppendCount--">incrementSlowAppendCount</a></span>()</code>
 <div class="block">Increment the number of appends that were slow</div>
 </td>
 </tr>
-<tr id="i10" 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/regionserver/wal/MetricsWALSourceImpl.html#incrementSlowSyncLogRoll--">incrementSlowSyncLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i11" 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/regionserver/wal/MetricsWALSourceImpl.html#incrementSyncTime-long-">incrementSyncTime</a></span>(long&nbsp;time)</code>
 <div class="block">Add the time it took to sync the wal.</div>
 </td>
 </tr>
-<tr id="i12" 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/regionserver/wal/MetricsWALSourceImpl.html#incrementWrittenBytes-long-">incrementWrittenBytes</a></span>(long&nbsp;val)</code>&nbsp;</td>
 </tr>
@@ -354,7 +359,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>appendSizeHisto</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/MetricHistogram.html" title="interface in org.apache.hadoop.metrics2">MetricHistogram</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.35">appendSizeHisto</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/MetricHistogram.html" title="interface in org.apache.hadoop.metrics2">MetricHistogram</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.38">appendSizeHisto</a></pre>
 </li>
 </ul>
 <a name="appendTimeHisto">
@@ -363,7 +368,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>appendTimeHisto</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/MetricHistogram.html" title="interface in org.apache.hadoop.metrics2">MetricHistogram</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.36">appendTimeHisto</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/MetricHistogram.html" title="interface in org.apache.hadoop.metrics2">MetricHistogram</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.39">appendTimeHisto</a></pre>
 </li>
 </ul>
 <a name="syncTimeHisto">
@@ -372,7 +377,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>syncTimeHisto</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/MetricHistogram.html" title="interface in org.apache.hadoop.metrics2">MetricHistogram</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.37">syncTimeHisto</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/MetricHistogram.html" title="interface in org.apache.hadoop.metrics2">MetricHistogram</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.40">syncTimeHisto</a></pre>
 </li>
 </ul>
 <a name="appendCount">
@@ -381,7 +386,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>appendCount</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.38">appendCount</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.41">appendCount</a></pre>
 </li>
 </ul>
 <a name="slowAppendCount">
@@ -390,7 +395,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>slowAppendCount</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.39">slowAppendCount</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.42">slowAppendCount</a></pre>
 </li>
 </ul>
 <a name="logRollRequested">
@@ -399,7 +404,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>logRollRequested</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.40">logRollRequested</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.43">logRollRequested</a></pre>
 </li>
 </ul>
 <a name="errorRollRequested">
@@ -408,7 +413,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>errorRollRequested</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.41">errorRollRequested</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.44">errorRollRequested</a></pre>
 </li>
 </ul>
 <a name="lowReplicationRollRequested">
@@ -417,7 +422,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>lowReplicationRollRequested</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.42">lowReplicationRollRequested</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.45">lowReplicationRollRequested</a></pre>
 </li>
 </ul>
 <a name="slowSyncRollRequested">
@@ -426,7 +431,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>slowSyncRollRequested</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.43">slowSyncRollRequested</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.46">slowSyncRollRequested</a></pre>
 </li>
 </ul>
 <a name="sizeRollRequested">
@@ -435,16 +440,34 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>sizeRollRequested</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.44">sizeRollRequested</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.47">sizeRollRequested</a></pre>
 </li>
 </ul>
 <a name="writtenBytes">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>writtenBytes</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.45">writtenBytes</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.48">writtenBytes</a></pre>
+</li>
+</ul>
+<a name="perTableAppendCount">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>perTableAppendCount</h4>
+<pre>private final&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;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.50">perTableAppendCount</a></pre>
+</li>
+</ul>
+<a name="perTableAppendSize">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>perTableAppendSize</h4>
+<pre>private final&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;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.51">perTableAppendSize</a></pre>
 </li>
 </ul>
 </li>
@@ -461,7 +484,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>MetricsWALSourceImpl</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.47">MetricsWALSourceImpl</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.53">MetricsWALSourceImpl</a>()</pre>
 </li>
 </ul>
 <a name="MetricsWALSourceImpl-java.lang.String-java.lang.String-java.lang.String-java.lang.String-">
@@ -470,7 +493,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MetricsWALSourceImpl</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.51">MetricsWALSourceImpl</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;metricsName,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.57">MetricsWALSourceImpl</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;metricsName,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;metricsDescription,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;metricsContext,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;metricsJmxContext)</pre>
@@ -484,18 +507,19 @@
 <!--   -->
 </a>
 <h3>Method Detail</h3>
-<a name="incrementAppendSize-long-">
+<a name="incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementAppendSize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.78">incrementAppendSize</a>(long&nbsp;size)</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-long-">MetricsWALSource</a></code></span></div>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.86">incrementAppendSize</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+                                long&nbsp;size)</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">MetricsWALSource</a></code></span></div>
 <div class="block">Add the append size.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-long-">incrementAppendSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendSize-org.apache.hadoop.hbase.TableName-long-">incrementAppendSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -505,7 +529,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementAppendTime</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.83">incrementAppendTime</a>(long&nbsp;time)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.101">incrementAppendTime</a>(long&nbsp;time)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendTime-long-">MetricsWALSource</a></code></span></div>
 <div class="block">Add the time it took to append.</div>
 <dl>
@@ -514,18 +538,18 @@
 </dl>
 </li>
 </ul>
-<a name="incrementAppendCount--">
+<a name="incrementAppendCount-org.apache.hadoop.hbase.TableName-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementAppendCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.88">incrementAppendCount</a>()</pre>
-<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendCount--">MetricsWALSource</a></code></span></div>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.106">incrementAppendCount</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/regionserver/wal/MetricsWALSource.html#incrementAppendCount-org.apache.hadoop.hbase.TableName-">MetricsWALSource</a></code></span></div>
 <div class="block">Increment the count of wal appends</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendCount--">incrementAppendCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementAppendCount-org.apache.hadoop.hbase.TableName-">incrementAppendCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
 </dl>
 </li>
 </ul>
@@ -535,7 +559,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSlowAppendCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.93">incrementSlowAppendCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.119">incrementSlowAppendCount</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementSlowAppendCount--">MetricsWALSource</a></code></span></div>
 <div class="block">Increment the number of appends that were slow</div>
 <dl>
@@ -550,7 +574,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSyncTime</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.98">incrementSyncTime</a>(long&nbsp;time)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.124">incrementSyncTime</a>(long&nbsp;time)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementSyncTime-long-">MetricsWALSource</a></code></span></div>
 <div class="block">Add the time it took to sync the wal.</div>
 <dl>
@@ -565,7 +589,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementLogRollRequested</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.103">incrementLogRollRequested</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.129">incrementLogRollRequested</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementLogRollRequested--">incrementLogRollRequested</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
@@ -578,7 +602,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementErrorLogRoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.108">incrementErrorLogRoll</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.134">incrementErrorLogRoll</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementErrorLogRoll--">incrementErrorLogRoll</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
@@ -591,7 +615,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementLowReplicationLogRoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.113">incrementLowReplicationLogRoll</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.139">incrementLowReplicationLogRoll</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementLowReplicationLogRoll--">incrementLowReplicationLogRoll</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
@@ -604,7 +628,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSlowSyncLogRoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.118">incrementSlowSyncLogRoll</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.144">incrementSlowSyncLogRoll</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementSlowSyncLogRoll--">incrementSlowSyncLogRoll</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
@@ -617,7 +641,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementSizeLogRoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.123">incrementSizeLogRoll</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.149">incrementSizeLogRoll</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementSizeLogRoll--">incrementSizeLogRoll</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
@@ -630,7 +654,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getSlowAppendCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.128">getSlowAppendCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.154">getSlowAppendCount</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#getSlowAppendCount--">getSlowAppendCount</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
@@ -640,29 +664,16 @@
 <a name="incrementWrittenBytes-long-">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>incrementWrittenBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.133">incrementWrittenBytes</a>(long&nbsp;val)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.159">incrementWrittenBytes</a>(long&nbsp;val)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#incrementWrittenBytes-long-">incrementWrittenBytes</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
 </dl>
 </li>
 </ul>
-<a name="getWrittenBytes--">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>getWrittenBytes</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#line.138">getWrittenBytes</a>()</pre>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html#getWrittenBytes--">getWrittenBytes</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">MetricsWALSource</a></code></dd>
-</dl>
-</li>
-</ul>
 </li>
 </ul>
 </li>
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 e12604b..4d371c2 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -247,10 +247,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.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
index e7f1a8e..1cabd85 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html
@@ -50,7 +50,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" target="_top">Frames</a></li>
@@ -770,7 +770,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" target="_top">Frames</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html
new file mode 100644
index 0000000..09e4b7c
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html
@@ -0,0 +1,317 @@
+<!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>ReplicationSinkServiceImpl.ReplicationStatisticsChore (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="ReplicationSinkServiceImpl.ReplicationStatisticsChore (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    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>
+</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/ReplicationSinkServiceImpl.ReplicationStatisticsChore.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/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" target="_top">Frames</a></li>
+<li><a href="ReplicationSinkServiceImpl.ReplicationStatisticsChore.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>Field&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="#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.replication</div>
+<h2 title="Class ReplicationSinkServiceImpl.ReplicationStatisticsChore" class="title">Class ReplicationSinkServiceImpl.ReplicationStatisticsChore</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><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.ScheduledChore</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl.ReplicationStatisticsChore</li>
+</ul>
+</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/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private final class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.98">ReplicationSinkServiceImpl.ReplicationStatisticsChore</a>
+extends <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== 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/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#ReplicationStatisticsChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ReplicationStatisticsChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+                          <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+                          int&nbsp;period)</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="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>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#chore--">chore</a></span>()</code>
+<div class="block">The task to execute on each scheduled execution of the Chore</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#printStats-java.lang.String-">printStats</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;stats)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.ScheduledChore">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></h3>
+<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#cancel--">cancel</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#cancel-boolean-">cancel</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#choreForTesting--">choreForTesting</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#cleanup--">cleanup</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getInitialDelay--">getInitialDelay</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getName--">getName</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getPeriod--">getPeriod</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getStopper--">getStopper</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getTimeUnit--">getTimeUnit</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#initialChore--">initialChore</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#isInitialChoreComplete--">isInitialChoreComplete</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#isScheduled--">isScheduled</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#run--">run</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#toString--">toString</a>, <a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#triggerNow--">triggerNow</a></code></li>
+</ul>
+<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/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.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>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="ReplicationStatisticsChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ReplicationStatisticsChore</h4>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#line.100">ReplicationStatisticsChore</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,
+                           <a href="../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+                           int&nbsp;period)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="chore--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>chore</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#line.105">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>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">chore</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="printStats-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>printStats</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html#line.109">printStats</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;stats)</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/ReplicationSinkServiceImpl.ReplicationStatisticsChore.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/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" target="_top">Frames</a></li>
+<li><a href="ReplicationSinkServiceImpl.ReplicationStatisticsChore.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>Field&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="#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;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html
new file mode 100644
index 0000000..1b5ae81
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html
@@ -0,0 +1,525 @@
+<!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>ReplicationSinkServiceImpl (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="ReplicationSinkServiceImpl (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    catch(err) {
+    }
+//-->
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":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>
+</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/ReplicationSinkServiceImpl.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/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" target="_top">Frames</a></li>
+<li><a href="ReplicationSinkServiceImpl.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><a href="#nested.class.summary">Nested</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><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.replication</div>
+<h2 title="Class ReplicationSinkServiceImpl" class="title">Class ReplicationSinkServiceImpl</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.replication.ReplicationSinkServiceImpl</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></dd>
+</dl>
+<hr>
+<br>
+<pre>@InterfaceAudience.Private
+public class <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.42">ReplicationSinkServiceImpl</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/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></pre>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="nested.class.summary">
+<!--   -->
+</a>
+<h3>Nested Class Summary</h3>
+<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Nested Class Summary table, listing nested classes, and an explanation">
+<caption><span>Nested Classes</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Class and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl.ReplicationStatisticsChore</a></span></code>&nbsp;</td>
+</tr>
+</table>
+</li>
+</ul>
+<!-- =========== 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 org.apache.hadoop.conf.Configuration</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#conf">conf</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private static org.slf4j.Logger</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#LOG">LOG</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicationLoad">replicationLoad</a></span></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicationSink">replicationSink</a></span></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <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/ReplicationSinkServiceImpl.html#server">server</a></span></code>&nbsp;</td>
+</tr>
+<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/ReplicationSinkServiceImpl.html#statsPeriod">statsPeriod</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/replication/ReplicationSinkServiceImpl.html#ReplicationSinkServiceImpl--">ReplicationSinkServiceImpl</a></span>()</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="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>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#initialize-org.apache.hadoop.hbase.Server-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">initialize</a></span>(<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
+          org.apache.hadoop.fs.FileSystem&nbsp;fs,
+          org.apache.hadoop.fs.Path&nbsp;logdir,
+          org.apache.hadoop.fs.Path&nbsp;oldLogDir,
+          <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;walProvider)</code>
+<div class="block">Initializes the replication service object.</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#refreshAndGetReplicationLoad--">refreshAndGetReplicationLoad</a></span>()</code>
+<div class="block">Refresh and Get ReplicationLoad</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateLogEntries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry&gt;&nbsp;entries,
+                   <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
+                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;replicationClusterId,
+                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceBaseNamespaceDirPath,
+                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceHFileArchiveDirPath)</code>
+<div class="block">Carry on the list of log entries down to the sink</div>
+</td>
+</tr>
+<tr id="i3" class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#startReplicationService--">startReplicationService</a></span>()</code>
+<div class="block">Start replication services.</div>
+</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#stopReplicationService--">stopReplicationService</a></span>()</code>
+<div class="block">Stops replication service.</div>
+</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/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#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>
+</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>private static final&nbsp;org.slf4j.Logger <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.43">LOG</a></pre>
+</li>
+</ul>
+<a name="conf">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>conf</h4>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.45">conf</a></pre>
+</li>
+</ul>
+<a name="server">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>server</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.47">server</a></pre>
+</li>
+</ul>
+<a name="replicationSink">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replicationSink</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.49">replicationSink</a></pre>
+</li>
+</ul>
+<a name="replicationLoad">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replicationLoad</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.52">replicationLoad</a></pre>
+</li>
+</ul>
+<a name="statsPeriod">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>statsPeriod</h4>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.54">statsPeriod</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="ReplicationSinkServiceImpl--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ReplicationSinkServiceImpl</h4>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.42">ReplicationSinkServiceImpl</a>()</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>replicateLogEntries</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.57">replicateLogEntries</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;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry&gt;&nbsp;entries,
+                                <a href="../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
+                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;replicationClusterId,
+                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceBaseNamespaceDirPath,
+                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceHFileArchiveDirPath)
+                         throws <a href="https://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/ReplicationSinkService.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">ReplicationSinkService</a></code></span></div>
+<div class="block">Carry on the list of log entries down to the sink</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateLogEntries</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></code></dd>
+<dt><span class="paramLabel">Parameters:</span></dt>
+<dd><code>entries</code> - list of WALEntries to replicate</dd>
+<dd><code>cells</code> - Cells that the WALEntries refer to (if cells is non-null)</dd>
+<dd><code>replicationClusterId</code> - Id which will uniquely identify source cluster FS client
+          configurations in the replication configuration directory</dd>
+<dd><code>sourceBaseNamespaceDirPath</code> - Path that point to the source cluster base namespace
+          directory required for replicating hfiles</dd>
+<dd><code>sourceHFileArchiveDirPath</code> - Path that point to the source cluster hfile archive directory</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>
+<a name="initialize-org.apache.hadoop.hbase.Server-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>initialize</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.65">initialize</a>(<a href="../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
+                       org.apache.hadoop.fs.FileSystem&nbsp;fs,
+                       org.apache.hadoop.fs.Path&nbsp;logdir,
+                       org.apache.hadoop.fs.Path&nbsp;oldLogDir,
+                       <a href="../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;walProvider)
+                throws <a href="https://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/ReplicationService.html#initialize-org.apache.hadoop.hbase.Server-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">ReplicationService</a></code></span></div>
+<div class="block">Initializes the replication service object.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html#initialize-org.apache.hadoop.hbase.Server-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">initialize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a></code></dd>
+<dd><code>walProvider</code> - can be null if not initialized inside a live region server environment, for
+          example, <code>ReplicationSyncUp</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>
+<a name="startReplicationService--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>startReplicationService</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.75">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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html#startReplicationService--">ReplicationService</a></code></span></div>
+<div class="block">Start replication services.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html#startReplicationService--">startReplicationService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</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>
+<a name="stopReplicationService--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>stopReplicationService</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.82">stopReplicationService</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html#stopReplicationService--">ReplicationService</a></code></span></div>
+<div class="block">Stops replication service.</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html#stopReplicationService--">stopReplicationService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="refreshAndGetReplicationLoad--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>refreshAndGetReplicationLoad</h4>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#line.89">refreshAndGetReplicationLoad</a>()</pre>
+<div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html#refreshAndGetReplicationLoad--">ReplicationService</a></code></span></div>
+<div class="block">Refresh and Get ReplicationLoad</div>
+<dl>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html#refreshAndGetReplicationLoad--">refreshAndGetReplicationLoad</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a></code></dd>
+</dl>
+</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/ReplicationSinkServiceImpl.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/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" target="_top">Frames</a></li>
+<li><a href="ReplicationSinkServiceImpl.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><a href="#nested.class.summary">Nested</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><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;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html
index 3adc313..785ccbf 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html
@@ -49,7 +49,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -255,7 +255,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html
new file mode 100644
index 0000000..99d1804
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationSinkServiceImpl.ReplicationStatisticsChore.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.replication.ReplicationSinkServiceImpl.ReplicationStatisticsChore (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.replication.ReplicationSinkServiceImpl.ReplicationStatisticsChore (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/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication">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/replication/class-use/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" target="_top">Frames</a></li>
+<li><a href="ReplicationSinkServiceImpl.ReplicationStatisticsChore.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.replication.ReplicationSinkServiceImpl.ReplicationStatisticsChore" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl.ReplicationStatisticsChore</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl.ReplicationStatisticsChore</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/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication">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/replication/class-use/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" target="_top">Frames</a></li>
+<li><a href="ReplicationSinkServiceImpl.ReplicationStatisticsChore.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;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationSinkServiceImpl.html b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationSinkServiceImpl.html
new file mode 100644
index 0000000..334c72b
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/replication/class-use/ReplicationSinkServiceImpl.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.replication.ReplicationSinkServiceImpl (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.replication.ReplicationSinkServiceImpl (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/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">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/replication/class-use/ReplicationSinkServiceImpl.html" target="_top">Frames</a></li>
+<li><a href="ReplicationSinkServiceImpl.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.replication.ReplicationSinkServiceImpl" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl</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/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">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/replication/class-use/ReplicationSinkServiceImpl.html" target="_top">Frames</a></li>
+<li><a href="ReplicationSinkServiceImpl.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;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-frame.html b/devapidocs/org/apache/hadoop/hbase/replication/package-frame.html
index 67a7cbe..dc1b383 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-frame.html
@@ -49,6 +49,7 @@
 <li><a href="ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationPeerImpl</a></li>
 <li><a href="ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationPeers</a></li>
 <li><a href="ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationQueueInfo</a></li>
+<li><a href="ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationSinkServiceImpl</a></li>
 <li><a href="ReplicationStorageFactory.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationStorageFactory</a></li>
 <li><a href="ReplicationTrackerZKImpl.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationTrackerZKImpl</a></li>
 <li><a href="ReplicationUtils.html" title="class in org.apache.hadoop.hbase.replication" target="classFrame">ReplicationUtils</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-summary.html b/devapidocs/org/apache/hadoop/hbase/replication/package-summary.html
index 47871be..7123512 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-summary.html
@@ -287,6 +287,10 @@
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication">ReplicationSinkServiceImpl</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html" title="class in org.apache.hadoop.hbase.replication">ReplicationStorageFactory</a></td>
 <td class="colLast">
 <div class="block">Used to create replication storage(peer, queue) classes.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
index a15fda0..f3a4541 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/package-tree.html
@@ -114,9 +114,15 @@
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeerImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeerImpl</span></a> (implements org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeer</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationQueueInfo</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationSinkServiceImpl</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationStorageFactory.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationStorageFactory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationTrackerZKImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationTrackerZKImpl</span></a> (implements org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationTracker</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationUtils.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationUtils</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ScheduledChore</span></a> (implements java.lang.<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>)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationSinkServiceImpl.ReplicationStatisticsChore</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ScopeWALEntryFilter.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ScopeWALEntryFilter</span></a> (implements org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/WALCellFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALCellFilter</a>, org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/WALEntryFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALEntryFilter</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SystemTableWALEntryFilter.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SystemTableWALEntryFilter</span></a> (implements org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/WALEntryFilter.html" title="interface in org.apache.hadoop.hbase.replication">WALEntryFilter</a>)</li>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Throwable</span></a> (implements 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>)
@@ -169,8 +175,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.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.PeerState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeer.PeerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="../../../../../org/apache/hadoop/hbase/replication/SyncReplicationState.html" title="enum in org.apache.hadoop.hbase.replication"><span class="typeNameLink">SyncReplicationState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSourceShipper.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSourceShipper.html
index 060eadf..b208c74 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSourceShipper.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSourceShipper.html
@@ -252,7 +252,7 @@
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getCurrentPath--">getCurrentPath</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getCurrentPosition--">getCurrentPosition</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#isActive--">isActive</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#run--">run</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#setWALReader-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceWALReader-">setWALReader</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#setWorkerState-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.WorkerState-">setWorkerState</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#startup-java.lang.Thread.UncaughtExceptionHandler-">startup</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#stopWorker--">stopWorker</a></code></li>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#clearWALEntryBatch--">clearWALEntryBatch</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getCurrentPath--">getCurrentPath</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getCurrentPosition--">getCurrentPosition</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#isActive--">isActive</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#isFinished--">isFinished</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#run--">run</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#setWALReader-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceWALReader-">setWALReader</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#setWorkerState-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.WorkerState-">setWorkerState</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#startup-java.lang.Thread.UncaughtExceptionHandler-">startup</a>, <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#stopWorker--">stopWorker</a></code></li>
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Thread">
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html
new file mode 100644
index 0000000..707ff87
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html
@@ -0,0 +1,318 @@
+<!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>Replication.ReplicationStatisticsChore (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="Replication.ReplicationStatisticsChore (Apache HBase 3.0.0-SNAPSHOT API)";
+        }
+    }
+    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>
+</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/Replication.ReplicationStatisticsChore.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/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" target="_top">Frames</a></li>
+<li><a href="Replication.ReplicationStatisticsChore.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>Field&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="#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.replication.regionserver</div>
+<h2 title="Class Replication.ReplicationStatisticsChore" class="title">Class Replication.ReplicationStatisticsChore</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><a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">org.apache.hadoop.hbase.ScheduledChore</a></li>
+<li>
+<ul class="inheritance">
+<li>org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsChore</li>
+</ul>
+</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/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></dd>
+</dl>
+<dl>
+<dt>Enclosing class:</dt>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dd>
+</dl>
+<hr>
+<br>
+<pre>private final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.197">Replication.ReplicationStatisticsChore</a>
+extends <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></pre>
+<div class="block">Statistics task. Periodically prints the cache statistics to the log.</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== 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/replication/regionserver/Replication.ReplicationStatisticsChore.html#ReplicationStatisticsChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">ReplicationStatisticsChore</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+                          <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+                          int&nbsp;period)</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="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>protected void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#chore--">chore</a></span>()</code>
+<div class="block">The task to execute on each scheduled execution of the Chore</div>
+</td>
+</tr>
+<tr id="i1" class="rowColor">
+<td class="colFirst"><code>private void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#printStats-java.lang.String-">printStats</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;stats)</code>&nbsp;</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.ScheduledChore">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#cancel--">cancel</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#cancel-boolean-">cancel</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#choreForTesting--">choreForTesting</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#cleanup--">cleanup</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getInitialDelay--">getInitialDelay</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getName--">getName</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getPeriod--">getPeriod</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getStopper--">getStopper</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#getTimeUnit--">getTimeUnit</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#initialChore--">initialChore</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#isInitialChoreComplete--">isInitialChoreComplete</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#isScheduled--">isScheduled</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#run--">run</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#toString--">toString</a>, <a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#triggerNow--">triggerNow</a></code></li>
+</ul>
+<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/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.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>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor.detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="ReplicationStatisticsChore-java.lang.String-org.apache.hadoop.hbase.Stoppable-int-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>ReplicationStatisticsChore</h4>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#line.199">ReplicationStatisticsChore</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,
+                           <a href="../../../../../../org/apache/hadoop/hbase/Stoppable.html" title="interface in org.apache.hadoop.hbase">Stoppable</a>&nbsp;stopper,
+                           int&nbsp;period)</pre>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method.detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="chore--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>chore</h4>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#line.204">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>
+<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
+<dd><code><a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html#chore--">chore</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase">ScheduledChore</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="printStats-java.lang.String-">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>printStats</h4>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html#line.208">printStats</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;stats)</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/Replication.ReplicationStatisticsChore.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/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" target="_top">Frames</a></li>
+<li><a href="Replication.ReplicationStatisticsChore.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>Field&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="#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;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html
deleted file mode 100644
index 96a93f3..0000000
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html
+++ /dev/null
@@ -1,350 +0,0 @@
-<!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>Replication.ReplicationStatisticsTask (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="Replication.ReplicationStatisticsTask (Apache HBase 3.0.0-SNAPSHOT API)";
-        }
-    }
-    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>
-</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/Replication.ReplicationStatisticsTask.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/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" target="_top">Frames</a></li>
-<li><a href="Replication.ReplicationStatisticsTask.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.replication.regionserver</div>
-<h2 title="Class Replication.ReplicationStatisticsTask" class="title">Class Replication.ReplicationStatisticsTask</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.replication.regionserver.Replication.ReplicationStatisticsTask</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/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></dd>
-</dl>
-<dl>
-<dt>Enclosing class:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication</a></dd>
-</dl>
-<hr>
-<br>
-<pre>private static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.247">Replication.ReplicationStatisticsTask</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/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
-<div class="block">Statistics task. Periodically prints the cache statistics to the log.</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="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#replicationManager">replicationManager</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#replicationSink">replicationSink</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/replication/regionserver/Replication.ReplicationStatisticsTask.html#ReplicationStatisticsTask-org.apache.hadoop.hbase.replication.regionserver.ReplicationSink-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager-">ReplicationStatisticsTask</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a>&nbsp;replicationSink,
-                         <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>&nbsp;replicationManager)</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="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>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#printStats-java.lang.String-">printStats</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;stats)</code>&nbsp;</td>
-</tr>
-<tr id="i1" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#run--">run</a></span>()</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/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#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>
-</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="replicationSink">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replicationSink</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#line.249">replicationSink</a></pre>
-</li>
-</ul>
-<a name="replicationManager">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>replicationManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#line.250">replicationManager</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="ReplicationStatisticsTask-org.apache.hadoop.hbase.replication.regionserver.ReplicationSink-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>ReplicationStatisticsTask</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#line.252">ReplicationStatisticsTask</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a>&nbsp;replicationSink,
-                                 <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>&nbsp;replicationManager)</pre>
-</li>
-</ul>
-</li>
-</ul>
-<!-- ============ METHOD DETAIL ========== -->
-<ul class="blockList">
-<li class="blockList"><a name="method.detail">
-<!--   -->
-</a>
-<h3>Method Detail</h3>
-<a name="run--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#line.259">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>
-</dl>
-</li>
-</ul>
-<a name="printStats-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>printStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#line.264">printStats</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;stats)</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/Replication.ReplicationStatisticsTask.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/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
-</ul>
-<ul class="navList">
-<li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" target="_top">Frames</a></li>
-<li><a href="Replication.ReplicationStatisticsTask.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;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
-</body>
-</html>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.html
index da66f6e..cd1170a 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/Replication.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};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -50,7 +50,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplaySyncReplicationWALCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/Replication.html" target="_top">Frames</a></li>
@@ -109,14 +109,14 @@
 <li class="blockList">
 <dl>
 <dt>All Implemented Interfaces:</dt>
-<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a></dd>
+<dd><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationService</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a></dd>
 </dl>
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.62">Replication</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.55">Replication</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/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></pre>
+implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a></pre>
 <div class="block">Gateway to Replication. Used by <a href="../../../../../../org/apache/hadoop/hbase/regionserver/HRegionServer.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegionServer</code></a>.</div>
 </li>
 </ul>
@@ -137,8 +137,8 @@
 <th class="colLast" scope="col">Class and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static class&nbsp;</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></span></code>
+<td class="colFirst"><code>private class&nbsp;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsChore</a></span></code>
 <div class="block">Statistics task.</div>
 </td>
 </tr>
@@ -194,26 +194,16 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#replicationPeers">replicationPeers</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#replicationSink">replicationSink</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationTracker</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#replicationTracker">replicationTracker</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/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#scheduleThreadPool">scheduleThreadPool</a></span></code>
-<div class="block">Statistics thread schedule pool</div>
-</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <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/Replication.html#server">server</a></span></code>&nbsp;</td>
 </tr>
 <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/Replication.html#statsThreadPeriod">statsThreadPeriod</a></span></code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#statsPeriod">statsPeriod</a></span></code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a></code></td>
@@ -260,34 +250,30 @@
                    <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)</code>&nbsp;</td>
 </tr>
 <tr id="i1" class="rowColor">
-<td class="colFirst"><code>private void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#buildReplicationLoad--">buildReplicationLoad</a></span>()</code>&nbsp;</td>
-</tr>
-<tr id="i2" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandler.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">PeerProcedureHandler</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#getPeerProcedureHandler--">getPeerProcedureHandler</a></span>()</code>
 <div class="block">Returns a Handler to handle peer procedures.</div>
 </td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i2" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#getReplicationManager--">getReplicationManager</a></span>()</code>
 <div class="block">Get the replication sources manager</div>
 </td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#getReplicationPeers--">getReplicationPeers</a></span>()</code>
 <div class="block">Return the replication peers.</div>
 </td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#getSyncReplicationPeerInfoProvider--">getSyncReplicationPeerInfoProvider</a></span>()</code>
 <div class="block">Returns an info provider for sync replication peer.</div>
 </td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#initialize-org.apache.hadoop.hbase.Server-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">initialize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
           org.apache.hadoop.fs.FileSystem&nbsp;fs,
@@ -297,36 +283,20 @@
 <div class="block">Initializes the replication service object.</div>
 </td>
 </tr>
-<tr id="i7" class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#join--">join</a></span>()</code>
-<div class="block">Join with the replication threads</div>
-</td>
-</tr>
-<tr id="i8" class="altColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#refreshAndGetReplicationLoad--">refreshAndGetReplicationLoad</a></span>()</code>
 <div class="block">Refresh and Get ReplicationLoad</div>
 </td>
 </tr>
-<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/replication/regionserver/Replication.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateLogEntries</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry&gt;&nbsp;entries,
-                   <a href="../../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
-                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;replicationClusterId,
-                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceBaseNamespaceDirPath,
-                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceHFileArchiveDirPath)</code>
-<div class="block">Carry on the list of log entries down to the sink</div>
-</td>
-</tr>
-<tr id="i10" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#startReplicationService--">startReplicationService</a></span>()</code>
 <div class="block">If replication is enabled and this cluster is a master,
  it starts</div>
 </td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#stopReplicationService--">stopReplicationService</a></span>()</code>
 <div class="block">Stops replication service.</div>
@@ -360,7 +330,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.63">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.56">LOG</a></pre>
 </li>
 </ul>
 <a name="isReplicationForBulkLoadDataEnabled">
@@ -369,7 +339,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isReplicationForBulkLoadDataEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.65">isReplicationForBulkLoadDataEnabled</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.58">isReplicationForBulkLoadDataEnabled</a></pre>
 </li>
 </ul>
 <a name="replicationManager">
@@ -378,7 +348,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.66">replicationManager</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.59">replicationManager</a></pre>
 </li>
 </ul>
 <a name="queueStorage">
@@ -387,7 +357,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>queueStorage</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.67">queueStorage</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueStorage.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationQueueStorage</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.60">queueStorage</a></pre>
 </li>
 </ul>
 <a name="replicationPeers">
@@ -396,7 +366,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationPeers</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.68">replicationPeers</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.61">replicationPeers</a></pre>
 </li>
 </ul>
 <a name="replicationTracker">
@@ -405,7 +375,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationTracker</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationTracker</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.69">replicationTracker</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationTracker.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationTracker</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.62">replicationTracker</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -414,16 +384,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.70">conf</a></pre>
-</li>
-</ul>
-<a name="replicationSink">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replicationSink</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.71">replicationSink</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.63">conf</a></pre>
 </li>
 </ul>
 <a name="syncReplicationPeerInfoProvider">
@@ -432,7 +393,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>syncReplicationPeerInfoProvider</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.72">syncReplicationPeerInfoProvider</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.64">syncReplicationPeerInfoProvider</a></pre>
 </li>
 </ul>
 <a name="server">
@@ -441,26 +402,16 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>server</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.74">server</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.66">server</a></pre>
 </li>
 </ul>
-<a name="scheduleThreadPool">
+<a name="statsPeriod">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>scheduleThreadPool</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.76">scheduleThreadPool</a></pre>
-<div class="block">Statistics thread schedule pool</div>
-</li>
-</ul>
-<a name="statsThreadPeriod">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>statsThreadPeriod</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.77">statsThreadPeriod</a></pre>
+<h4>statsPeriod</h4>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.67">statsPeriod</a></pre>
 </li>
 </ul>
 <a name="replicationLoad">
@@ -469,7 +420,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationLoad</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.79">replicationLoad</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.69">replicationLoad</a></pre>
 </li>
 </ul>
 <a name="globalMetricsSource">
@@ -478,7 +429,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>globalMetricsSource</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationGlobalSourceSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.80">globalMetricsSource</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationGlobalSourceSource.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">MetricsReplicationGlobalSourceSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.70">globalMetricsSource</a></pre>
 </li>
 </ul>
 <a name="peerProcedureHandler">
@@ -487,7 +438,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>peerProcedureHandler</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandler.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">PeerProcedureHandler</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.82">peerProcedureHandler</a></pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandler.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">PeerProcedureHandler</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.72">peerProcedureHandler</a></pre>
 </li>
 </ul>
 </li>
@@ -504,7 +455,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>Replication</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.87">Replication</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.77">Replication</a>()</pre>
 <div class="block">Empty constructor</div>
 </li>
 </ul>
@@ -522,7 +473,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.91">initialize</a>(<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.81">initialize</a>(<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
                        org.apache.hadoop.fs.FileSystem&nbsp;fs,
                        org.apache.hadoop.fs.Path&nbsp;logDir,
                        org.apache.hadoop.fs.Path&nbsp;oldLogDir,
@@ -546,7 +497,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getPeerProcedureHandler</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandler.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">PeerProcedureHandler</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.167">getPeerProcedureHandler</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandler.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">PeerProcedureHandler</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.151">getPeerProcedureHandler</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html#getPeerProcedureHandler--">ReplicationSourceService</a></code></span></div>
 <div class="block">Returns a Handler to handle peer procedures.</div>
 <dl>
@@ -561,7 +512,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>stopReplicationService</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.175">stopReplicationService</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.159">stopReplicationService</a>()</pre>
 <div class="block">Stops replication service.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -569,54 +520,13 @@
 </dl>
 </li>
 </ul>
-<a name="join--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>join</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.182">join</a>()</pre>
-<div class="block">Join with the replication threads</div>
-</li>
-</ul>
-<a name="replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>replicateLogEntries</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.204">replicateLogEntries</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;org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry&gt;&nbsp;entries,
-                                <a href="../../../../../../org/apache/hadoop/hbase/CellScanner.html" title="interface in org.apache.hadoop.hbase">CellScanner</a>&nbsp;cells,
-                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;replicationClusterId,
-                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceBaseNamespaceDirPath,
-                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sourceHFileArchiveDirPath)
-                         throws <a href="https://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">Carry on the list of log entries down to the sink</div>
-<dl>
-<dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
-<dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html#replicateLogEntries-java.util.List-org.apache.hadoop.hbase.CellScanner-java.lang.String-java.lang.String-java.lang.String-">replicateLogEntries</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a></code></dd>
-<dt><span class="paramLabel">Parameters:</span></dt>
-<dd><code>entries</code> - list of entries to replicate</dd>
-<dd><code>cells</code> - The data -- the cells -- that <code>entries</code> describes (the entries do not
-          contain the Cells we are replicating; they are passed here on the side in this
-          CellScanner).</dd>
-<dd><code>replicationClusterId</code> - Id which will uniquely identify source cluster FS client
-          configurations in the replication configuration directory</dd>
-<dd><code>sourceBaseNamespaceDirPath</code> - Path that point to the source cluster base namespace
-          directory required for replicating hfiles</dd>
-<dd><code>sourceHFileArchiveDirPath</code> - Path that point to the source cluster hfile archive directory</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>
 <a name="startReplicationService--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>startReplicationService</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.217">startReplicationService</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.169">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">If replication is enabled and this cluster is a master,
  it starts</div>
@@ -634,7 +544,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationManager</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/Replication.html#line.230">getReplicationManager</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/Replication.html#line.180">getReplicationManager</a>()</pre>
 <div class="block">Get the replication sources manager</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -650,7 +560,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>addHFileRefsToQueue</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.234">addHFileRefsToQueue</a>(<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.184">addHFileRefsToQueue</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="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -666,7 +576,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshAndGetReplicationLoad</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.272">refreshAndGetReplicationLoad</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.216">refreshAndGetReplicationLoad</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationService.html#refreshAndGetReplicationLoad--">ReplicationService</a></code></span></div>
 <div class="block">Refresh and Get ReplicationLoad</div>
 <dl>
@@ -675,22 +585,13 @@
 </dl>
 </li>
 </ul>
-<a name="buildReplicationLoad--">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>buildReplicationLoad</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.281">buildReplicationLoad</a>()</pre>
-</li>
-</ul>
 <a name="getSyncReplicationPeerInfoProvider--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>getSyncReplicationPeerInfoProvider</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.291">getSyncReplicationPeerInfoProvider</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.229">getSyncReplicationPeerInfoProvider</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html#getSyncReplicationPeerInfoProvider--">ReplicationSourceService</a></code></span></div>
 <div class="block">Returns an info provider for sync replication peer.</div>
 <dl>
@@ -705,7 +606,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getReplicationPeers</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.296">getReplicationPeers</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication">ReplicationPeers</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html#line.234">getReplicationPeers</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html#getReplicationPeers--">ReplicationSourceService</a></code></span></div>
 <div class="block">Return the replication peers.</div>
 <dl>
@@ -743,7 +644,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplaySyncReplicationWALCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/Replication.html" target="_top">Frames</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html
index 95ad2e6..747e280 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html
@@ -49,7 +49,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -143,10 +143,6 @@
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ReplicationLoadSource&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#replicationLoadSourceEntries">replicationLoadSourceEntries</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a></code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#sinkMetrics">sinkMetrics</a></span></code>&nbsp;</td>
-</tr>
 </table>
 </li>
 </ul>
@@ -184,7 +180,7 @@
 <tr id="i0" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#buildReplicationLoad-java.util.List-org.apache.hadoop.hbase.replication.regionserver.MetricsSink-">buildReplicationLoad</a></span>(<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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;sources,
-                    <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>&nbsp;skMetrics)</code>
+                    <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>&nbsp;sinkMetrics)</code>
 <div class="block">buildReplicationLoad</div>
 </td>
 </tr>
@@ -243,22 +239,13 @@
 <pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.38">EMPTY_REPLICATIONLOAD</a></pre>
 </li>
 </ul>
-<a name="sinkMetrics">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>sinkMetrics</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.39">sinkMetrics</a></pre>
-</li>
-</ul>
 <a name="replicationLoadSourceEntries">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationLoadSourceEntries</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ReplicationLoadSource&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.41">replicationLoadSourceEntries</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;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ReplicationLoadSource&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.40">replicationLoadSourceEntries</a></pre>
 </li>
 </ul>
 <a name="replicationLoadSink">
@@ -267,7 +254,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>replicationLoadSink</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ReplicationLoadSink <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.42">replicationLoadSink</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.ReplicationLoadSink <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.41">replicationLoadSink</a></pre>
 </li>
 </ul>
 </li>
@@ -284,7 +271,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationLoad</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.45">ReplicationLoad</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.44">ReplicationLoad</a>()</pre>
 <div class="block">default constructor</div>
 </li>
 </ul>
@@ -302,13 +289,13 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>buildReplicationLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.55">buildReplicationLoad</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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;sources,
-                                 <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>&nbsp;skMetrics)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#line.54">buildReplicationLoad</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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;sources,
+                                 <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>&nbsp;sinkMetrics)</pre>
 <div class="block">buildReplicationLoad</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>sources</code> - List of ReplicationSource instances for which metrics should be reported</dd>
-<dd><code>skMetrics</code> - </dd>
+<dd><code>sinkMetrics</code> - metrics of the replication sink</dd>
 </dl>
 </li>
 </ul>
@@ -401,7 +388,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
+<li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
 <li><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
 </ul>
 <ul class="navList">
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 b009d08..08df021 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 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.754">ReplicationSource.LogsComparator</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.755">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 @@
 <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.754">LogsComparator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.LogsComparator.html#line.755">LogsComparator</a>()</pre>
 </li>
 </ul>
 </li>
@@ -220,7 +220,7 @@
 <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.757">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.758">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 @@
 <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.771">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.772">getTS</a>(org.apache.hadoop.fs.Path&nbsp;p)</pre>
 <div class="block"><p>
  Split a path to get the start time
  </p>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
index 3349bed..967bfe4 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html
@@ -1372,7 +1372,7 @@
 <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.731">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.732">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>
@@ -1389,7 +1389,7 @@
 <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.736">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.737">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>
@@ -1406,7 +1406,7 @@
 <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.747">isSourceActive</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.748">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>
@@ -1421,7 +1421,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationQueueInfo</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication">ReplicationQueueInfo</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.776">getReplicationQueueInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication">ReplicationQueueInfo</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.777">getReplicationQueueInfo</a>()</pre>
 </li>
 </ul>
 <a name="isWorkerRunning--">
@@ -1430,7 +1430,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isWorkerRunning</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.780">isWorkerRunning</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.781">isWorkerRunning</a>()</pre>
 </li>
 </ul>
 <a name="getStats--">
@@ -1439,7 +1439,7 @@
 <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.790">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.791">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>
@@ -1457,7 +1457,7 @@
 <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.811">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.812">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>
@@ -1472,7 +1472,7 @@
 <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.817">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.818">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>
@@ -1491,7 +1491,7 @@
 <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.828">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.829">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>
@@ -1506,7 +1506,7 @@
 <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.833">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.834">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>
@@ -1524,7 +1524,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getPeer</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.838">getPeer</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationPeer.html" title="interface in org.apache.hadoop.hbase.replication">ReplicationPeer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.839">getPeer</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html#getPeer--">ReplicationSourceInterface</a></code></span></div>
 <div class="block">Get the replication peer instance.</div>
 <dl>
@@ -1541,7 +1541,7 @@
 <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.842">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.843">getServer</a>()</pre>
 </li>
 </ul>
 <a name="getQueueStorage--">
@@ -1550,7 +1550,7 @@
 <ul class="blockList">
 <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.846">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.847">getQueueStorage</a>()</pre>
 </li>
 </ul>
 <a name="removeWorker-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper-">
@@ -1559,7 +1559,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>removeWorker</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.850">removeWorker</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>&nbsp;worker)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.851">removeWorker</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>&nbsp;worker)</pre>
 </li>
 </ul>
 <a name="logPeerId--">
@@ -1568,7 +1568,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>logPeerId</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.854">logPeerId</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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html#line.855">logPeerId</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
index 1cb048e..25af0be 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
@@ -122,7 +122,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.51">ReplicationSourceShipper.WorkerState</a>
+<pre>public static enum <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.53">ReplicationSourceShipper.WorkerState</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/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&gt;</pre>
 </li>
 </ul>
@@ -213,7 +213,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>RUNNING</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.52">RUNNING</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.54">RUNNING</a></pre>
 </li>
 </ul>
 <a name="STOPPED">
@@ -222,7 +222,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>STOPPED</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.53">STOPPED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.55">STOPPED</a></pre>
 </li>
 </ul>
 <a name="FINISHED">
@@ -231,7 +231,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FINISHED</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.54">FINISHED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.56">FINISHED</a></pre>
 </li>
 </ul>
 </li>
@@ -248,7 +248,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>values</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.51">values</a>()</pre>
+<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.53">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:
@@ -268,7 +268,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>valueOf</h4>
-<pre>public static&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.51">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/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html#line.53">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 
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
index c060451..181f328 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.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};
+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 altColor = "altColor";
 var rowColor = "rowColor";
@@ -123,7 +123,7 @@
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.47">ReplicationSourceShipper</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.49">ReplicationSourceShipper</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>
 <div class="block">This thread reads entries from a queue and ships them. Entries are placed onto the queue by
  ReplicationSourceWALReaderThread</div>
@@ -274,66 +274,74 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#cleanUpHFileRefs-org.apache.hadoop.hbase.wal.WALEdit-">cleanUpHFileRefs</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</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/replication/regionserver/ReplicationSourceShipper.html#clearWALEntryBatch--">clearWALEntryBatch</a></span>()</code>
+<div class="block">Attempts to properly update <code>ReplicationSourceManager.totalBufferUser</code>,
+ in case there were unprocessed entries batched by the reader to the shipper,
+ but the shipper didn't manage to ship those because the replication source is being terminated.</div>
+</td>
+</tr>
+<tr id="i2" class="altColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getBatchEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">getBatchEntrySizeExcludeBulkLoad</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</code>
 <div class="block">get batchEntry size excludes bulk load file sizes.</div>
 </td>
 </tr>
-<tr id="i2" class="altColor">
+<tr id="i3" class="rowColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getCurrentPath--">getCurrentPath</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i3" class="rowColor">
+<tr id="i4" class="altColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getCurrentPosition--">getCurrentPosition</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i4" class="altColor">
+<tr id="i5" class="rowColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#getStartPosition--">getStartPosition</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i5" class="rowColor">
+<tr id="i6" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#isActive--">isActive</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i6" class="altColor">
+<tr id="i7" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#isFinished--">isFinished</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i7" class="rowColor">
+<tr id="i8" 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/ReplicationSourceShipper.html#noMoreData--">noMoreData</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i8" class="altColor">
+<tr id="i9" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#postFinish--">postFinish</a></span>()</code>&nbsp;</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/replication/regionserver/ReplicationSourceShipper.html#run--">run</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i10" class="altColor">
+<tr id="i11" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#setWALReader-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceWALReader-">setWALReader</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>&nbsp;entryReader)</code>&nbsp;</td>
 </tr>
-<tr id="i11" class="rowColor">
+<tr id="i12" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#setWorkerState-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.WorkerState-">setWorkerState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;state)</code>&nbsp;</td>
 </tr>
-<tr id="i12" class="altColor">
+<tr id="i13" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#shipEdits-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">shipEdits</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</code>
 <div class="block">Do the shipping logic</div>
 </td>
 </tr>
-<tr id="i13" class="rowColor">
+<tr id="i14" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#startup-java.lang.Thread.UncaughtExceptionHandler-">startup</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a>&nbsp;handler)</code>&nbsp;</td>
 </tr>
-<tr id="i14" class="altColor">
+<tr id="i15" class="rowColor">
 <td class="colFirst"><code>(package private) void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#stopWorker--">stopWorker</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i15" class="rowColor">
+<tr id="i16" 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/ReplicationSourceShipper.html#updateLogPosition-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">updateLogPosition</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch)</code>&nbsp;</td>
 </tr>
@@ -372,7 +380,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.48">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.50">LOG</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -381,7 +389,7 @@
 <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/replication/regionserver/ReplicationSourceShipper.html#line.57">conf</a></pre>
+<pre>private final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.59">conf</a></pre>
 </li>
 </ul>
 <a name="walGroupId">
@@ -390,7 +398,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>walGroupId</h4>
-<pre>protected 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/ReplicationSourceShipper.html#line.58">walGroupId</a></pre>
+<pre>protected 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/ReplicationSourceShipper.html#line.60">walGroupId</a></pre>
 </li>
 </ul>
 <a name="queue">
@@ -399,7 +407,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>queue</h4>
-<pre>protected final&nbsp;<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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.59">queue</a></pre>
+<pre>protected final&nbsp;<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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.61">queue</a></pre>
 </li>
 </ul>
 <a name="source">
@@ -408,7 +416,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>source</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.60">source</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.62">source</a></pre>
 </li>
 </ul>
 <a name="currentPosition">
@@ -417,7 +425,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>currentPosition</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.64">currentPosition</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.66">currentPosition</a></pre>
 </li>
 </ul>
 <a name="currentPath">
@@ -426,7 +434,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>currentPath</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.66">currentPath</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.68">currentPath</a></pre>
 </li>
 </ul>
 <a name="state">
@@ -435,7 +443,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>state</h4>
-<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.68">state</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.70">state</a></pre>
 </li>
 </ul>
 <a name="entryReader">
@@ -444,7 +452,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>entryReader</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.69">entryReader</a></pre>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.71">entryReader</a></pre>
 </li>
 </ul>
 <a name="sleepForRetries">
@@ -453,7 +461,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepForRetries</h4>
-<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.72">sleepForRetries</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.74">sleepForRetries</a></pre>
 </li>
 </ul>
 <a name="maxRetriesMultiplier">
@@ -462,7 +470,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRetriesMultiplier</h4>
-<pre>protected final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.74">maxRetriesMultiplier</a></pre>
+<pre>protected final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.76">maxRetriesMultiplier</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_TIMEOUT">
@@ -471,7 +479,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_TIMEOUT</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.75">DEFAULT_TIMEOUT</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.77">DEFAULT_TIMEOUT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.DEFAULT_TIMEOUT">Constant Field Values</a></dd>
@@ -484,7 +492,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getEntriesTimeout</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.76">getEntriesTimeout</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.78">getEntriesTimeout</a></pre>
 </li>
 </ul>
 <a name="shipEditsTimeout">
@@ -493,7 +501,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>shipEditsTimeout</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.77">shipEditsTimeout</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.79">shipEditsTimeout</a></pre>
 </li>
 </ul>
 </li>
@@ -510,7 +518,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationSourceShipper</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.79">ReplicationSourceShipper</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.81">ReplicationSourceShipper</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;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,
                                 <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a>&nbsp;source)</pre>
@@ -530,7 +538,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.96">run</a>()</pre>
+<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.98">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>
@@ -545,7 +553,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>noMoreData</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.136">noMoreData</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.138">noMoreData</a>()</pre>
 </li>
 </ul>
 <a name="postFinish--">
@@ -554,7 +562,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>postFinish</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.148">postFinish</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.150">postFinish</a>()</pre>
 </li>
 </ul>
 <a name="getBatchEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-">
@@ -563,7 +571,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatchEntrySizeExcludeBulkLoad</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.155">getBatchEntrySizeExcludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.157">getBatchEntrySizeExcludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</pre>
 <div class="block">get batchEntry size excludes bulk load file sizes.
  Uses ReplicationSourceWALReader's static method.</div>
 </li>
@@ -574,7 +582,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>shipEdits</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.166">shipEdits</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.168">shipEdits</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;entryBatch)</pre>
 <div class="block">Do the shipping logic</div>
 </li>
 </ul>
@@ -584,7 +592,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanUpHFileRefs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.242">cleanUpHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.244">cleanUpHFileRefs</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)
                        throws <a href="https://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>
@@ -598,7 +606,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>updateLogPosition</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.266">updateLogPosition</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.268">updateLogPosition</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch)</pre>
 </li>
 </ul>
 <a name="startup-java.lang.Thread.UncaughtExceptionHandler-">
@@ -607,7 +615,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>startup</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.290">startup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a>&nbsp;handler)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.292">startup</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.UncaughtExceptionHandler.html?is-external=true" title="class or interface in java.lang">Thread.UncaughtExceptionHandler</a>&nbsp;handler)</pre>
 </li>
 </ul>
 <a name="getCurrentPath--">
@@ -616,7 +624,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentPath</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.297">getCurrentPath</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.299">getCurrentPath</a>()</pre>
 </li>
 </ul>
 <a name="getCurrentPosition--">
@@ -625,7 +633,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentPosition</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.301">getCurrentPosition</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.303">getCurrentPosition</a>()</pre>
 </li>
 </ul>
 <a name="setWALReader-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceWALReader-">
@@ -634,7 +642,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setWALReader</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.305">setWALReader</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>&nbsp;entryReader)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.307">setWALReader</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>&nbsp;entryReader)</pre>
 </li>
 </ul>
 <a name="getStartPosition--">
@@ -643,7 +651,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartPosition</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.309">getStartPosition</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.311">getStartPosition</a>()</pre>
 </li>
 </ul>
 <a name="isActive--">
@@ -652,7 +660,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isActive</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.313">isActive</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.315">isActive</a>()</pre>
 </li>
 </ul>
 <a name="setWorkerState-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.WorkerState-">
@@ -661,7 +669,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setWorkerState</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.317">setWorkerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;state)</pre>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.319">setWorkerState</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;state)</pre>
 </li>
 </ul>
 <a name="stopWorker--">
@@ -670,16 +678,39 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>stopWorker</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.321">stopWorker</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.323">stopWorker</a>()</pre>
 </li>
 </ul>
 <a name="isFinished--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>isFinished</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.325">isFinished</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.327">isFinished</a>()</pre>
+</li>
+</ul>
+<a name="clearWALEntryBatch--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>clearWALEntryBatch</h4>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html#line.347">clearWALEntryBatch</a>()</pre>
+<div class="block">Attempts to properly update <code>ReplicationSourceManager.totalBufferUser</code>,
+ in case there were unprocessed entries batched by the reader to the shipper,
+ but the shipper didn't manage to ship those because the replication source is being terminated.
+ In that case, it iterates through the batched entries and decrease the pending
+ entries size from <code>ReplicationSourceManager.totalBufferUser</code>
+ <p/>
+ <b>NOTES</b>
+ 1) This method should only be called upon replication source termination.
+ It blocks waiting for both shipper and reader threads termination,
+ to make sure no race conditions
+ when updating <code>ReplicationSourceManager.totalBufferUser</code>.
+
+ 2) It <b>does not</b> attempt to terminate reader and shipper threads. Those <b>must</b>
+ have been triggered interruption/termination prior to calling this method.</div>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
index 5197e1a..6cc2a8b 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
@@ -170,7 +170,7 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#currentPosition">currentPosition</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/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&gt;</code></td>
+<td class="colFirst"><code>(package private) <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/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#entryBatchQueue">entryBatchQueue</a></span></code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
@@ -451,7 +451,8 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>entryBatchQueue</h4>
-<pre>private final&nbsp;<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/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.63">entryBatchQueue</a></pre>
+<pre>@InterfaceAudience.Private
+final&nbsp;<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/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.64">entryBatchQueue</a></pre>
 </li>
 </ul>
 <a name="replicationBatchSizeCapacity">
@@ -460,7 +461,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationBatchSizeCapacity</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.65">replicationBatchSizeCapacity</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.66">replicationBatchSizeCapacity</a></pre>
 </li>
 </ul>
 <a name="replicationBatchCountCapacity">
@@ -469,7 +470,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>replicationBatchCountCapacity</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.67">replicationBatchCountCapacity</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.68">replicationBatchCountCapacity</a></pre>
 </li>
 </ul>
 <a name="currentPosition">
@@ -478,7 +479,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>currentPosition</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.69">currentPosition</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.70">currentPosition</a></pre>
 </li>
 </ul>
 <a name="sleepForRetries">
@@ -487,7 +488,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>sleepForRetries</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.70">sleepForRetries</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.71">sleepForRetries</a></pre>
 </li>
 </ul>
 <a name="maxRetriesMultiplier">
@@ -496,7 +497,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRetriesMultiplier</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.71">maxRetriesMultiplier</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.72">maxRetriesMultiplier</a></pre>
 </li>
 </ul>
 <a name="eofAutoRecovery">
@@ -505,7 +506,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>eofAutoRecovery</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.72">eofAutoRecovery</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.73">eofAutoRecovery</a></pre>
 </li>
 </ul>
 <a name="isReaderRunning">
@@ -514,7 +515,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isReaderRunning</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.75">isReaderRunning</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.76">isReaderRunning</a></pre>
 </li>
 </ul>
 <a name="totalBufferUsed">
@@ -523,7 +524,7 @@
 <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/ReplicationSourceWALReader.html#line.77">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/ReplicationSourceWALReader.html#line.78">totalBufferUsed</a></pre>
 </li>
 </ul>
 <a name="totalBufferQuota">
@@ -532,7 +533,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>totalBufferQuota</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.78">totalBufferQuota</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.79">totalBufferQuota</a></pre>
 </li>
 </ul>
 </li>
@@ -549,7 +550,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplicationSourceWALReader</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.90">ReplicationSourceWALReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.91">ReplicationSourceWALReader</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   <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;logQueue,
                                   long&nbsp;startPosition,
@@ -582,7 +583,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.121">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.122">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>
@@ -597,7 +598,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>addEntryToBatch</h4>
-<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.166">addEntryToBatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
+<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.167">addEntryToBatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
                                         <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
@@ -607,7 +608,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>switched</h4>
-<pre>protected static final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.185">switched</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream,
+<pre>protected static final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.186">switched</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream,
                                         org.apache.hadoop.fs.Path&nbsp;path)</pre>
 </li>
 </ul>
@@ -617,7 +618,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>readWALEntries</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.190">readWALEntries</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.191">readWALEntries</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
@@ -633,7 +634,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>handleEmptyWALEntryBatch</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.232">handleEmptyWALEntryBatch</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.233">handleEmptyWALEntryBatch</a>()
                                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>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -647,7 +648,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>handleEofException</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.248">handleEofException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;e)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.249">handleEofException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;e)</pre>
 </li>
 </ul>
 <a name="getCurrentPath--">
@@ -656,7 +657,7 @@
 <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/ReplicationSourceWALReader.html#line.263">getCurrentPath</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.264">getCurrentPath</a>()</pre>
 </li>
 </ul>
 <a name="checkQuota--">
@@ -665,7 +666,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>checkQuota</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.274">checkQuota</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.275">checkQuota</a>()</pre>
 </li>
 </ul>
 <a name="createBatch-org.apache.hadoop.hbase.replication.regionserver.WALEntryStream-">
@@ -674,7 +675,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>createBatch</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.285">createBatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)</pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.286">createBatch</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>&nbsp;entryStream)</pre>
 </li>
 </ul>
 <a name="filterEntry-org.apache.hadoop.hbase.wal.WAL.Entry-">
@@ -683,7 +684,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>filterEntry</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.289">filterEntry</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.290">filterEntry</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="take--">
@@ -692,7 +693,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>take</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.304">take</a>()
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.305">take</a>()
                    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">Retrieves the next batch of WAL entries from the queue, waiting up to the specified time for a
  batch to become available</div>
@@ -710,7 +711,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>poll</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.308">poll</a>(long&nbsp;timeout)
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.309">poll</a>(long&nbsp;timeout)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -724,7 +725,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getEntrySizeIncludeBulkLoad</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.312">getEntrySizeIncludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.313">getEntrySizeIncludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="getEntrySizeExcludeBulkLoad-org.apache.hadoop.hbase.wal.WAL.Entry-">
@@ -733,7 +734,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getEntrySizeExcludeBulkLoad</h4>
-<pre>public static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.317">getEntrySizeExcludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
+<pre>public static&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.318">getEntrySizeExcludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry)</pre>
 </li>
 </ul>
 <a name="updateBatchStats-org.apache.hadoop.hbase.replication.regionserver.WALEntryBatch-org.apache.hadoop.hbase.wal.WAL.Entry-long-">
@@ -742,7 +743,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>updateBatchStats</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.324">updateBatchStats</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.325">updateBatchStats</a>(<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&nbsp;batch,
                               <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;entry,
                               long&nbsp;entrySize)</pre>
 </li>
@@ -753,7 +754,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>countDistinctRowKeysAndHFiles</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/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.338">countDistinctRowKeysAndHFiles</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
+<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/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.339">countDistinctRowKeysAndHFiles</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
 <div class="block">Count the number of different row keys in the given edit because of mini-batching. We assume
  that there's at least one Cell in the WALEdit.</div>
 <dl>
@@ -770,7 +771,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>sizeOfStoreFilesIncludeBulkLoad</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.376">sizeOfStoreFilesIncludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.377">sizeOfStoreFilesIncludeBulkLoad</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edit)</pre>
 <div class="block">Calculate the total size of all the store files</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -786,7 +787,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>acquireBufferQuota</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.406">acquireBufferQuota</a>(long&nbsp;size)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.407">acquireBufferQuota</a>(long&nbsp;size)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>size</code> - delta size for grown buffer</dd>
@@ -801,7 +802,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>isReaderRunning</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.416">isReaderRunning</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.417">isReaderRunning</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>whether the reader thread is running</dd>
@@ -814,7 +815,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setReaderRunning</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.423">setReaderRunning</a>(boolean&nbsp;readerRunning)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#line.424">setReaderRunning</a>(boolean&nbsp;readerRunning)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>readerRunning</code> - the readerRunning to set</dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html
index 4ef9d04..37b4159 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/SerialReplicationSourceWALReader.html
@@ -170,6 +170,13 @@
 </tr>
 </table>
 <ul class="blockList">
+<li class="blockList"><a name="fields.inherited.from.class.org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceWALReader">
+<!--   -->
+</a>
+<h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a></h3>
+<code><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#entryBatchQueue">entryBatchQueue</a></code></li>
+</ul>
+<ul class="blockList">
 <li class="blockList"><a name="fields.inherited.from.class.java.lang.Thread">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsSink.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsSink.html
index 470eb46..a37bcfa 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/MetricsSink.html
@@ -106,10 +106,6 @@
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a></code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSink.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html#metrics">metrics</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a></code></td>
-<td class="colLast"><span class="typeNameLabel">ReplicationLoad.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#sinkMetrics">sinkMetrics</a></span></code>&nbsp;</td>
-</tr>
 </tbody>
 </table>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -137,7 +133,7 @@
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationLoad.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#buildReplicationLoad-java.util.List-org.apache.hadoop.hbase.replication.regionserver.MetricsSink-">buildReplicationLoad</a></span>(<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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;sources,
-                    <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>&nbsp;skMetrics)</code>
+                    <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>&nbsp;sinkMetrics)</code>
 <div class="block">buildReplicationLoad</div>
 </td>
 </tr>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsTask.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsChore.html
similarity index 81%
rename from devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsTask.html
rename to devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsChore.html
index d570880..70831fb 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsTask.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsChore.html
@@ -4,7 +4,7 @@
 <head>
 <!-- Generated by javadoc -->
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsTask (Apache HBase 3.0.0-SNAPSHOT API)</title>
+<title>Uses of Class org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsChore (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>
@@ -12,7 +12,7 @@
 <script type="text/javascript"><!--
     try {
         if (location.href.indexOf('is-external=true') == -1) {
-            parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsTask (Apache HBase 3.0.0-SNAPSHOT API)";
+            parent.document.title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsChore (Apache HBase 3.0.0-SNAPSHOT API)";
         }
     }
     catch(err) {
@@ -33,7 +33,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../../../../../../../overview-tree.html">Tree</a></li>
 <li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -47,8 +47,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsTask.html" target="_top">Frames</a></li>
-<li><a href="Replication.ReplicationStatisticsTask.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsChore.html" target="_top">Frames</a></li>
+<li><a href="Replication.ReplicationStatisticsChore.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_top">
 <li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
@@ -70,9 +70,9 @@
 </a></div>
 <!-- ========= END OF TOP NAVBAR ========= -->
 <div class="header">
-<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsTask" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsTask</h2>
+<h2 title="Uses of Class org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsChore" class="title">Uses of Class<br>org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsChore</h2>
 </div>
-<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsTask</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.replication.regionserver.Replication.ReplicationStatisticsChore</div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->
 <div class="bottomNav"><a name="navbar.bottom">
 <!--   -->
@@ -84,7 +84,7 @@
 <ul class="navList" title="Navigation">
 <li><a href="../../../../../../../overview-summary.html">Overview</a></li>
 <li><a href="../package-summary.html">Package</a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Class</a></li>
 <li class="navBarCell1Rev">Use</li>
 <li><a href="../../../../../../../overview-tree.html">Tree</a></li>
 <li><a href="../../../../../../../deprecated-list.html">Deprecated</a></li>
@@ -98,8 +98,8 @@
 <li>Next</li>
 </ul>
 <ul class="navList">
-<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsTask.html" target="_top">Frames</a></li>
-<li><a href="Replication.ReplicationStatisticsTask.html" target="_top">No&nbsp;Frames</a></li>
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/replication/regionserver/class-use/Replication.ReplicationStatisticsChore.html" target="_top">Frames</a></li>
+<li><a href="Replication.ReplicationStatisticsChore.html" target="_top">No&nbsp;Frames</a></li>
 </ul>
 <ul class="navList" id="allclasses_navbar_bottom">
 <li><a href="../../../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationLoad.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationLoad.html
index ace6b51..295e0bc 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationLoad.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationLoad.html
@@ -87,6 +87,12 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
+<td class="colLast">
+<div class="block">Multi Cluster Replication</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -115,6 +121,37 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a> in <a href="../../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSinkServiceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicationLoad">replicationLoad</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> that return <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSinkServiceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#refreshAndGetReplicationLoad--">refreshAndGetReplicationLoad</a></span>()</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSink.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSink.html
index fea0e9a..b2a9aa6 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSink.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSink.html
@@ -83,20 +83,22 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
-<td class="colLast">&nbsp;</td>
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
+<td class="colLast">
+<div class="block">Multi Cluster Replication</div>
+</td>
 </tr>
 </tbody>
 </table>
 </li>
 <li class="blockList">
 <ul class="blockList">
-<li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
 <!--   -->
 </a>
-<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a> in <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a></h3>
+<h3>Uses of <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a> in <a href="../../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></h3>
 <table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
-<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></span><span class="tabEnd">&nbsp;</span></caption>
+<caption><span>Fields in <a href="../../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> declared as <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></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>
@@ -104,23 +106,7 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Replication.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html#replicationSink">replicationSink</a></span></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Replication.ReplicationStatisticsTask.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#replicationSink">replicationSink</a></span></code>&nbsp;</td>
-</tr>
-</tbody>
-</table>
-<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
-<caption><span>Constructors in <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/package-summary.html">org.apache.hadoop.hbase.replication.regionserver</a> with parameters of type <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colOne" scope="col">Constructor and Description</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#ReplicationStatisticsTask-org.apache.hadoop.hbase.replication.regionserver.ReplicationSink-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager-">ReplicationStatisticsTask</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a>&nbsp;replicationSink,
-                         <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>&nbsp;replicationManager)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSinkServiceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#replicationSink">replicationSink</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
 </table>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceInterface.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceInterface.html
index b7e2912..fe55baa 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceInterface.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceInterface.html
@@ -243,7 +243,7 @@
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationLoad.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html#buildReplicationLoad-java.util.List-org.apache.hadoop.hbase.replication.regionserver.MetricsSink-">buildReplicationLoad</a></span>(<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/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>&gt;&nbsp;sources,
-                    <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>&nbsp;skMetrics)</code>
+                    <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">MetricsSink</a>&nbsp;sinkMetrics)</code>
 <div class="block">buildReplicationLoad</div>
 </td>
 </tr>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceManager.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceManager.html
index cb2ff50..4ea32e9 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceManager.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceManager.html
@@ -140,10 +140,6 @@
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a></code></td>
-<td class="colLast"><span class="typeNameLabel">Replication.ReplicationStatisticsTask.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#replicationManager">replicationManager</a></span></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a></code></td>
 <td class="colLast"><span class="typeNameLabel">PeerProcedureHandlerImpl.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/PeerProcedureHandlerImpl.html#replicationSourceManager">replicationSourceManager</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
@@ -244,10 +240,6 @@
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALActionListener.html#ReplicationSourceWALActionListener-org.apache.hadoop.conf.Configuration-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager-">ReplicationSourceWALActionListener</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>&nbsp;manager)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html#ReplicationStatisticsTask-org.apache.hadoop.hbase.replication.regionserver.ReplicationSink-org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceManager-">ReplicationStatisticsTask</a></span>(<a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a>&nbsp;replicationSink,
-                         <a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>&nbsp;replicationManager)</code>&nbsp;</td>
-</tr>
 </tbody>
 </table>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html
index 92f7014..8893761 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html
@@ -116,7 +116,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private <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/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&gt;</code></td>
+<td class="colFirst"><code>(package private) <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/replication/regionserver/WALEntryBatch.html" title="class in org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>&gt;</code></td>
 <td class="colLast"><span class="typeNameLabel">ReplicationSourceWALReader.</span><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html#entryBatchQueue">entryBatchQueue</a></span></code>&nbsp;</td>
 </tr>
 </tbody>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
index c2be7f1..4c78769 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-frame.html
@@ -54,7 +54,6 @@
 <li><a href="RejectRequestsFromClientStateChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">RejectRequestsFromClientStateChecker</a></li>
 <li><a href="ReplaySyncReplicationWALCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplaySyncReplicationWALCallable</a></li>
 <li><a href="Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">Replication</a></li>
-<li><a href="Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">Replication.ReplicationStatisticsTask</a></li>
 <li><a href="ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplicationLoad</a></li>
 <li><a href="ReplicationObserver.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplicationObserver</a></li>
 <li><a href="ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver" target="classFrame">ReplicationSink</a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
index 90e4fcd..524e702 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-summary.html
@@ -301,12 +301,6 @@
 <div class="block">Gateway to Replication.</div>
 </td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver">Replication.ReplicationStatisticsTask</a></td>
-<td class="colLast">
-<div class="block">Statistics task.</div>
-</td>
-</tr>
 <tr class="altColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver">ReplicationLoad</a></td>
 <td class="colLast">
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index b24533f..3538515 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -124,8 +124,7 @@
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RejectReplicationRequestStateChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">RejectReplicationRequestStateChecker</span></a> (implements java.util.function.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/BiPredicate.html?is-external=true" title="class or interface in java.util.function">BiPredicate</a>&lt;T,U&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/RejectRequestsFromClientStateChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">RejectRequestsFromClientStateChecker</span></a> (implements java.util.function.<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/BiPredicate.html?is-external=true" title="class or interface in java.util.function">BiPredicate</a>&lt;T,U&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplaySyncReplicationWALCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplaySyncReplicationWALCallable</span></a> (implements org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>, org.apache.hadoop.hbase.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication.ReplicationStatisticsTask</span></a> (implements java.lang.<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>)</li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationLoad</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationObserver.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationObserver</span></a> (implements org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionCoprocessor.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionCoprocessor</a>, org.apache.hadoop.hbase.coprocessor.<a href="../../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">RegionObserver</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSink</span></a></li>
@@ -142,6 +141,11 @@
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationStatus.ReplicationStatusBuilder.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationStatus.ReplicationStatusBuilder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSyncUp.DummyServer.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSyncUp.DummyServer</span></a> (implements org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationThrottler</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../../../org/apache/hadoop/hbase/ScheduledChore.html" title="class in org.apache.hadoop.hbase"><span class="typeNameLink">ScheduledChore</span></a> (implements java.lang.<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>)
+<ul>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication.ReplicationStatisticsChore</span></a></li>
+</ul>
+</li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SerialReplicationChecker.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">SerialReplicationChecker</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SwitchRpcThrottleRemoteCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">SwitchRpcThrottleRemoteCallable</span></a> (implements org.apache.hadoop.hbase.procedure2.<a href="../../../../../../org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProviderImpl.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">SyncReplicationPeerInfoProviderImpl</span></a> (implements org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/SyncReplicationPeerInfoProvider.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a>)</li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
index 9f0724b..f9b38d9 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-use.html
@@ -193,6 +193,18 @@
  through the metrics interfaces.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationLoad.html#org.apache.hadoop.hbase.replication">ReplicationLoad</a>
+<div class="block">This class is used for exporting some of the info from replication metrics</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSink.html#org.apache.hadoop.hbase.replication">ReplicationSink</a>
+<div class="block">
+ This class is responsible for replicating the edits coming
+ from another cluster.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
@@ -288,97 +300,90 @@
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSink.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSink</a>
-<div class="block">
- This class is responsible for replicating the edits coming
- from another cluster.</div>
-</td>
-</tr>
-<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSource.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSource</a>
 <div class="block">Class that handles the source of a replication stream.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceInterface.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>
 <div class="block">Interface that defines a replication source</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceManager.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager</a>
 <div class="block">This class is responsible to manage all the replication sources.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceManager.ReplicationQueueOperation.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceManager.ReplicationQueueOperation</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceShipper.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper</a>
 <div class="block">This thread reads entries from a queue and ships them.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceShipper.WorkerState.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceShipper.WorkerState</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationSourceWALReader.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceWALReader</a>
 <div class="block">Reads and filters WAL entries, groups the filtered entries into batches, and puts the batches
  onto a queue</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationStatus.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationStatus</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationStatus.ReplicationStatusBuilder.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationStatus.ReplicationStatusBuilder</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/ReplicationThrottler.html#org.apache.hadoop.hbase.replication.regionserver">ReplicationThrottler</a>
 <div class="block">Per-peer per-node throttling controller for replication: enabled if
  bandwidth &gt; 0, a cycle = 100ms, by throttling we guarantee data pushed
  to peer within each cycle won't exceed 'bandwidth' bytes</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/SerialReplicationChecker.html#org.apache.hadoop.hbase.replication.regionserver">SerialReplicationChecker</a>
 <div class="block">
  Helper class to determine whether we can push a given WAL entry without breaking the replication
  order.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/SourceFSConfigurationProvider.html#org.apache.hadoop.hbase.replication.regionserver">SourceFSConfigurationProvider</a>
 <div class="block">Interface that defines how a region server in peer cluster will get source cluster file system
  configurations.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/SyncReplicationPeerInfoProvider.html#org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerInfoProvider</a>
 <div class="block">Get the information for a sync replication peer.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/SyncReplicationPeerMappingManager.html#org.apache.hadoop.hbase.replication.regionserver">SyncReplicationPeerMappingManager</a>
 <div class="block">Used to map region to sync replication peer id.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryBatch.html#org.apache.hadoop.hbase.replication.regionserver">WALEntryBatch</a>
 <div class="block">Holds a batch of WAL entries to replicate, along with some statistics</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntrySinkFilter.html#org.apache.hadoop.hbase.replication.regionserver">WALEntrySinkFilter</a>
 <div class="block">Implementations are installed on a Replication Sink called from inside
  ReplicationSink#replicateEntries to filter replicated WALEntries based off WALEntry attributes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/WALEntryStream.html#org.apache.hadoop.hbase.replication.regionserver">WALEntryStream</a>
 <div class="block">Streaming access to WAL entries.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/class-use/WALFileLengthProvider.html#org.apache.hadoop.hbase.replication.regionserver">WALFileLengthProvider</a>
 <div class="block">Used by replication to prevent replicating unacked log entries.</div>
 </td>
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 4e1e842..ee1fd7f 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -162,12 +162,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.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/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>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index c793825..cf0e24b 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/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.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/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/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 60fa9ee..1cc1670 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -211,9 +211,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/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/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>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index 5ec741b..73897f7 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -541,15 +541,15 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/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/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/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/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/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.html
index 4890b8d..e298231 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.html
@@ -87,10 +87,16 @@
 <td class="colLast">&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.replication">org.apache.hadoop.hbase.replication</a></td>
+<td class="colLast">
+<div class="block">Multi Cluster Replication</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.replication.regionserver">org.apache.hadoop.hbase.replication.regionserver</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="#org.apache.hadoop.hbase.wal">org.apache.hadoop.hbase.wal</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
@@ -145,6 +151,28 @@
 </tbody>
 </table>
 </li>
+<li class="blockList"><a name="org.apache.hadoop.hbase.replication">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a> in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a></h3>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
+<caption><span>Methods in <a href="../../../../../../org/apache/hadoop/hbase/replication/package-summary.html">org.apache.hadoop.hbase.replication</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="typeNameLabel">ReplicationSinkServiceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html#initialize-org.apache.hadoop.hbase.Server-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider-">initialize</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/Server.html" title="interface in org.apache.hadoop.hbase">Server</a>&nbsp;server,
+          org.apache.hadoop.fs.FileSystem&nbsp;fs,
+          org.apache.hadoop.fs.Path&nbsp;logdir,
+          org.apache.hadoop.fs.Path&nbsp;oldLogDir,
+          <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider</a>&nbsp;walProvider)</code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
 <!--   -->
 </a>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index fc68ccf..de59d54 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -197,8 +197,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-use.html b/devapidocs/org/apache/hadoop/hbase/wal/package-use.html
index 14f1e99..c2719b7 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-use.html
@@ -393,6 +393,11 @@
 <div class="block">Utility class that lets us keep track of the edit with it's key.</div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/wal/class-use/WALProvider.html#org.apache.hadoop.hbase.replication">WALProvider</a>
+<div class="block">The Write Ahead Log (WAL) stores all durable edits to the HRegion.</div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>
diff --git a/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html b/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html
index a9f10e4..1144238 100644
--- a/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html
+++ b/devapidocs/org/apache/hadoop/metrics2/lib/class-use/MutableFastCounter.html
@@ -455,6 +455,23 @@
 </tr>
 </tbody>
 </table>
+<table class="useSummary" border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a> with type parameters of type <a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a></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>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <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;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsWALSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#perTableAppendCount">perTableAppendCount</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/util/concurrent/ConcurrentMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentMap</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>,<a href="../../../../../../org/apache/hadoop/metrics2/lib/MutableFastCounter.html" title="class in org.apache.hadoop.metrics2.lib">MutableFastCounter</a>&gt;</code></td>
+<td class="colLast"><span class="typeNameLabel">MetricsWALSourceImpl.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html#perTableAppendSize">perTableAppendSize</a></span></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
 </li>
 <li class="blockList"><a name="org.apache.hadoop.hbase.replication.regionserver">
 <!--   -->
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index a58984a..2e5b477 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -3210,8 +3210,7 @@
 </li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="org/apache/hadoop/hbase/ipc/RemoteWithExtrasException.ClassLoaderHolder.html" title="class in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">RemoteWithExtrasException.ClassLoaderHolder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplaySyncReplicationWALCallable.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplaySyncReplicationWALCallable</span></a> (implements org.apache.hadoop.hbase.procedure2.<a href="org/apache/hadoop/hbase/procedure2/RSProcedureCallable.html" title="interface in org.apache.hadoop.hbase.procedure2">RSProcedureCallable</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>, org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication.ReplicationStatisticsTask</span></a> (implements java.lang.<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>)</li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ReplicationSourceService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSourceService</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationBarrierFamilyFormat</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationBarrierFamilyFormat.ReplicationBarrierResult.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationBarrierFamilyFormat.ReplicationBarrierResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.hbck.<a href="org/apache/hadoop/hbase/util/hbck/ReplicationChecker.html" title="class in org.apache.hadoop.hbase.util.hbck"><span class="typeNameLink">ReplicationChecker</span></a></li>
@@ -3232,6 +3231,7 @@
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationPeers.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationPeers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationQueueInfo.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationQueueInfo</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSink</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationSinkServiceImpl</span></a> (implements org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/ReplicationSinkService.html" title="interface in org.apache.hadoop.hbase.regionserver">ReplicationSinkService</a>)</li>
 <li type="circle">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"><span class="typeNameLink">ReplicationSource</span></a> (implements org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceInterface.html" title="interface in org.apache.hadoop.hbase.replication.regionserver">ReplicationSourceInterface</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/RecoveredReplicationSource.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">RecoveredReplicationSource</span></a></li>
@@ -3486,7 +3486,9 @@
 <li type="circle">org.apache.hadoop.hbase.master.normalizer.<a href="org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.html" title="class in org.apache.hadoop.hbase.master.normalizer"><span class="typeNameLink">RegionNormalizerChore</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="org/apache/hadoop/hbase/quotas/RegionSizeReportingChore.html" title="class in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RegionSizeReportingChore</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/RegionsRecoveryChore.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionsRecoveryChore</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">Replication.ReplicationStatisticsChore</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/ReplicationBarrierCleaner.html" title="class in org.apache.hadoop.hbase.master.cleaner"><span class="typeNameLink">ReplicationBarrierCleaner</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html" title="class in org.apache.hadoop.hbase.replication"><span class="typeNameLink">ReplicationSinkServiceImpl.ReplicationStatisticsChore</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="org/apache/hadoop/hbase/master/ServerManager.FlushedSequenceIdFlusher.html" title="class in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.FlushedSequenceIdFlusher</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.namequeues.<a href="org/apache/hadoop/hbase/namequeues/SlowLogTableOpsChore.html" title="class in org.apache.hadoop.hbase.namequeues"><span class="typeNameLink">SlowLogTableOpsChore</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.cleaner.<a href="org/apache/hadoop/hbase/master/cleaner/SnapshotCleanerChore.html" title="class in org.apache.hadoop.hbase.master.cleaner"><span class="typeNameLink">SnapshotCleanerChore</span></a></li>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html b/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html
index abccdb5..1e32c44 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.OperationStatusCode.html
@@ -989,634 +989,636 @@
 <span class="sourceLineNo">981</span>   */<a name="line.981"></a>
 <span class="sourceLineNo">982</span>  public static final String<a name="line.982"></a>
 <span class="sourceLineNo">983</span>      REPLICATION_SOURCE_SERVICE_CLASSNAME = "hbase.replication.source.service";<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  public static final String<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      REPLICATION_SINK_SERVICE_CLASSNAME = "hbase.replication.sink.service";<a name="line.985"></a>
-<span class="sourceLineNo">986</span>  public static final String REPLICATION_SERVICE_CLASSNAME_DEFAULT =<a name="line.986"></a>
-<span class="sourceLineNo">987</span>    "org.apache.hadoop.hbase.replication.regionserver.Replication";<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  public static final String REPLICATION_BULKLOAD_ENABLE_KEY = "hbase.replication.bulkload.enabled";<a name="line.988"></a>
-<span class="sourceLineNo">989</span>  public static final boolean REPLICATION_BULKLOAD_ENABLE_DEFAULT = false;<a name="line.989"></a>
-<span class="sourceLineNo">990</span>  /** Replication cluster id of source cluster which uniquely identifies itself with peer cluster */<a name="line.990"></a>
-<span class="sourceLineNo">991</span>  public static final String REPLICATION_CLUSTER_ID = "hbase.replication.cluster.id";<a name="line.991"></a>
-<span class="sourceLineNo">992</span>  /**<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * Max total size of buffered entries in all replication peers. It will prevent server getting<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * OOM if there are many peers. Default value is 256MB which is four times to default<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * replication.source.size.capacity.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   */<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  public static final String REPLICATION_SOURCE_TOTAL_BUFFER_KEY = "replication.total.buffer.quota";<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>  public static final int REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT = 256 * 1024 * 1024;<a name="line.999"></a>
+<span class="sourceLineNo">984</span>  public static final String REPLICATION_SERVICE_CLASSNAME_DEFAULT =<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    "org.apache.hadoop.hbase.replication.regionserver.Replication";<a name="line.985"></a>
+<span class="sourceLineNo">986</span>  public static final String<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      REPLICATION_SINK_SERVICE_CLASSNAME = "hbase.replication.sink.service";<a name="line.987"></a>
+<span class="sourceLineNo">988</span>  public static final String REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT =<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    "org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl";<a name="line.989"></a>
+<span class="sourceLineNo">990</span>  public static final String REPLICATION_BULKLOAD_ENABLE_KEY = "hbase.replication.bulkload.enabled";<a name="line.990"></a>
+<span class="sourceLineNo">991</span>  public static final boolean REPLICATION_BULKLOAD_ENABLE_DEFAULT = false;<a name="line.991"></a>
+<span class="sourceLineNo">992</span>  /** Replication cluster id of source cluster which uniquely identifies itself with peer cluster */<a name="line.992"></a>
+<span class="sourceLineNo">993</span>  public static final String REPLICATION_CLUSTER_ID = "hbase.replication.cluster.id";<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  /**<a name="line.994"></a>
+<span class="sourceLineNo">995</span>   * Max total size of buffered entries in all replication peers. It will prevent server getting<a name="line.995"></a>
+<span class="sourceLineNo">996</span>   * OOM if there are many peers. Default value is 256MB which is four times to default<a name="line.996"></a>
+<span class="sourceLineNo">997</span>   * replication.source.size.capacity.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>   */<a name="line.998"></a>
+<span class="sourceLineNo">999</span>  public static final String REPLICATION_SOURCE_TOTAL_BUFFER_KEY = "replication.total.buffer.quota";<a name="line.999"></a>
 <span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>  /** Configuration key for ReplicationSource shipeEdits timeout */<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  public static final String REPLICATION_SOURCE_SHIPEDITS_TIMEOUT =<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      "replication.source.shipedits.timeout";<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>  public static final int REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT = 60000;<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>  /**<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>   * Directory where the source cluster file system client configuration are placed which is used by<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>   * sink cluster to copy HFiles from source cluster file system<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>   */<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>  public static final String REPLICATION_CONF_DIR = "hbase.replication.conf.dir";<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span><a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>  /** Maximum time to retry for a failed bulk load request */<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>  public static final String BULKLOAD_MAX_RETRIES_NUMBER = "hbase.bulkload.retries.number";<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span><a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>  public static final String KEY_FOR_HOSTNAME_SEEN_BY_MASTER =<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    "hbase.regionserver.hostname.seen.by.master";<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>  public static final String HBASE_MASTER_LOGCLEANER_PLUGINS =<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      "hbase.master.logcleaner.plugins";<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  public static final String HBASE_REGION_SPLIT_POLICY_KEY =<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    "hbase.regionserver.region.split.policy";<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>  /** Whether nonces are enabled; default is true. */<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  public static final String HBASE_RS_NONCES_ENABLED = "hbase.regionserver.nonces.enabled";<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  /**<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   * Configuration key for the size of the block cache<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>   */<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>  public static final String HFILE_BLOCK_CACHE_SIZE_KEY =<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>    "hfile.block.cache.size";<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>  public static final float HFILE_BLOCK_CACHE_SIZE_DEFAULT = 0.4f;<a name="line.1033"></a>
+<span class="sourceLineNo">1001</span>  public static final int REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT = 256 * 1024 * 1024;<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span><a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>  /** Configuration key for ReplicationSource shipeEdits timeout */<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>  public static final String REPLICATION_SOURCE_SHIPEDITS_TIMEOUT =<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      "replication.source.shipedits.timeout";<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>  public static final int REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT = 60000;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span><a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>  /**<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * Directory where the source cluster file system client configuration are placed which is used by<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   * sink cluster to copy HFiles from source cluster file system<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>   */<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  public static final String REPLICATION_CONF_DIR = "hbase.replication.conf.dir";<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span><a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>  /** Maximum time to retry for a failed bulk load request */<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>  public static final String BULKLOAD_MAX_RETRIES_NUMBER = "hbase.bulkload.retries.number";<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span><a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>  public static final String KEY_FOR_HOSTNAME_SEEN_BY_MASTER =<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    "hbase.regionserver.hostname.seen.by.master";<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span><a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>  public static final String HBASE_MASTER_LOGCLEANER_PLUGINS =<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      "hbase.master.logcleaner.plugins";<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span><a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  public static final String HBASE_REGION_SPLIT_POLICY_KEY =<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    "hbase.regionserver.region.split.policy";<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span><a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>  /** Whether nonces are enabled; default is true. */<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>  public static final String HBASE_RS_NONCES_ENABLED = "hbase.regionserver.nonces.enabled";<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span><a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>  /**<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * Configuration key for the size of the block cache<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   */<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>  public static final String HFILE_BLOCK_CACHE_SIZE_KEY =<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    "hfile.block.cache.size";<a name="line.1033"></a>
 <span class="sourceLineNo">1034</span><a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>  /*<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    * Minimum percentage of free heap necessary for a successful cluster startup.<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    */<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>  public static final float HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD = 0.2f;<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  /**<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>   */<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  @Deprecated<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>  public static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  /**<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>   * &lt;pre&gt;<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   * &lt;/pre&gt;<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>   */<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  @Deprecated<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  public static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>  /**<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   */<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>  @Deprecated<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>  /**<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>  @Deprecated<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  /**<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   */<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>  @Deprecated<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>  public static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>  public static final String CP_HTD_ATTR_INCLUSION_KEY =<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      "hbase.coprocessor.classloader.included.classes";<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span><a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>  /** The delay when re-trying a socket operation in a loop (HBASE-4712) */<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  public static final int SOCKET_RETRY_WAIT_MS = 200;<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>  /** Host name of the local machine */<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>  public static final String LOCALHOST = "localhost";<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span><a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>  /**<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>   * If this parameter is set to true, then hbase will read<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>   * data and then verify checksums. Checksum verification<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>   * inside hdfs will be switched off.  However, if the hbase-checksum<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>   * verification fails, then it will switch back to using<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>   * hdfs checksums for verifiying data that is being read from storage.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>   *<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>   * If this parameter is set to false, then hbase will not<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>   * verify any checksums, instead it will depend on checksum verification<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>   * being done in the hdfs client.<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>   */<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>  public static final String HBASE_CHECKSUM_VERIFICATION =<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      "hbase.regionserver.checksum.verify";<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span><a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>  public static final String LOCALHOST_IP = "127.0.0.1";<a name="line.1099"></a>
+<span class="sourceLineNo">1035</span>  public static final float HFILE_BLOCK_CACHE_SIZE_DEFAULT = 0.4f;<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span><a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>  /*<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>    * Minimum percentage of free heap necessary for a successful cluster startup.<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>    */<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>  public static final float HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD = 0.2f;<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span><a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>  /**<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>   */<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>  @Deprecated<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>  public static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>      Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span><a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>  /**<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>   * &lt;pre&gt;<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>   * &lt;/pre&gt;<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>   */<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>  @Deprecated<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>  public static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>  /**<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>   */<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>  @Deprecated<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>  /**<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   */<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>  @Deprecated<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>  /**<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>   */<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>  @Deprecated<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>  public static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>  public static final String CP_HTD_ATTR_INCLUSION_KEY =<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      "hbase.coprocessor.classloader.included.classes";<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>  /** The delay when re-trying a socket operation in a loop (HBASE-4712) */<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>  public static final int SOCKET_RETRY_WAIT_MS = 200;<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span><a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>  /** Host name of the local machine */<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>  public static final String LOCALHOST = "localhost";<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span><a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>  /**<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>   * If this parameter is set to true, then hbase will read<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   * data and then verify checksums. Checksum verification<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   * inside hdfs will be switched off.  However, if the hbase-checksum<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   * verification fails, then it will switch back to using<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>   * hdfs checksums for verifiying data that is being read from storage.<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>   *<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>   * If this parameter is set to false, then hbase will not<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>   * verify any checksums, instead it will depend on checksum verification<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>   * being done in the hdfs client.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>   */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>  public static final String HBASE_CHECKSUM_VERIFICATION =<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      "hbase.regionserver.checksum.verify";<a name="line.1099"></a>
 <span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>  public static final String REGION_SERVER_HANDLER_COUNT = "hbase.regionserver.handler.count";<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static final int DEFAULT_REGION_SERVER_HANDLER_COUNT = 30;<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>  /*<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>   * REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT:<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>   * -1  =&gt; Disable aborting<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>   * 0   =&gt; Abort if even a single handler has died<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>   * 0.x =&gt; Abort only when this percent of handlers have died<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>   * 1   =&gt; Abort only all of the handers have died<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>   */<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>  public static final String REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT =<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      "hbase.regionserver.handler.abort.on.error.percent";<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  public static final double DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT = 0.5;<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span><a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>  //High priority handlers to deal with admin requests and system table operation requests<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>  public static final String REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT =<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      "hbase.regionserver.metahandler.count";<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>  public static final int DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT = 20;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span><a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>  public static final String REGION_SERVER_REPLICATION_HANDLER_COUNT =<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      "hbase.regionserver.replication.handler.count";<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>  public static final int DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT = 3;<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>  // Meta Transition handlers to deal with meta ReportRegionStateTransitionRequest. Meta transition<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>  // should be dealt with in a separate handler in case blocking other region's transition.<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>  public static final String MASTER_META_TRANSITION_HANDLER_COUNT =<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      "hbase.master.meta.transition.handler.count";<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>  public static final int MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT = 1;<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span><a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>  /** Conf key for enabling meta replication */<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>  public static final String USE_META_REPLICAS = "hbase.meta.replicas.use";<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>  public static final boolean DEFAULT_USE_META_REPLICAS = false;<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>  public static final String META_REPLICAS_NUM = "hbase.meta.replica.count";<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>  public static final int DEFAULT_META_REPLICA_NUM = 1;<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span><a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  /**<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>   * The name of the configuration parameter that specifies<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>   * the number of bytes in a newly created checksum chunk.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   */<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>  public static final String BYTES_PER_CHECKSUM =<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>      "hbase.hstore.bytes.per.checksum";<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  /**<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>   * The name of the configuration parameter that specifies<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>   * the name of an algorithm that is used to compute checksums<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>   * for newly created blocks.<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>   */<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>  public static final String CHECKSUM_TYPE_NAME =<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      "hbase.hstore.checksum.algorithm";<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span><a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>  /** Enable file permission modification from standard hbase */<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>  public static final String ENABLE_DATA_FILE_UMASK = "hbase.data.umask.enable";<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  /** File permission umask to use when creating hbase data files */<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>  public static final String DATA_FILE_UMASK_KEY = "hbase.data.umask";<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span><a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  /** Configuration name of WAL Compression */<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>  public static final String ENABLE_WAL_COMPRESSION =<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    "hbase.regionserver.wal.enablecompression";<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>  /** Configuration name of WAL storage policy<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>   * Valid values are: HOT, COLD, WARM, ALL_SSD, ONE_SSD, LAZY_PERSIST<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>   * See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html*/<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>  public static final String WAL_STORAGE_POLICY = "hbase.wal.storage.policy";<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>  /**<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>   * "NONE" is not a valid storage policy and means we defer the policy to HDFS. @see<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>   * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20691"&gt;HBASE-20691&lt;/a&gt;<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>   */<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>  public static final String DEFER_TO_HDFS_STORAGE_POLICY = "NONE";<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  /** By default we defer the WAL storage policy to HDFS */<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>  public static final String DEFAULT_WAL_STORAGE_POLICY = DEFER_TO_HDFS_STORAGE_POLICY;<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>  /** Region in Transition metrics threshold time */<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>  public static final String LOAD_BALANCER_SLOP_KEY = "hbase.regions.slop";<a name="line.1175"></a>
+<span class="sourceLineNo">1101</span>  public static final String LOCALHOST_IP = "127.0.0.1";<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span><a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>  public static final String REGION_SERVER_HANDLER_COUNT = "hbase.regionserver.handler.count";<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>  public static final int DEFAULT_REGION_SERVER_HANDLER_COUNT = 30;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span><a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>  /*<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>   * REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT:<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>   * -1  =&gt; Disable aborting<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>   * 0   =&gt; Abort if even a single handler has died<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>   * 0.x =&gt; Abort only when this percent of handlers have died<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>   * 1   =&gt; Abort only all of the handers have died<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>   */<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>  public static final String REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT =<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      "hbase.regionserver.handler.abort.on.error.percent";<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>  public static final double DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT = 0.5;<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>  //High priority handlers to deal with admin requests and system table operation requests<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>  public static final String REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT =<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      "hbase.regionserver.metahandler.count";<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>  public static final int DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT = 20;<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span><a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>  public static final String REGION_SERVER_REPLICATION_HANDLER_COUNT =<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      "hbase.regionserver.replication.handler.count";<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>  public static final int DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT = 3;<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  // Meta Transition handlers to deal with meta ReportRegionStateTransitionRequest. Meta transition<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>  // should be dealt with in a separate handler in case blocking other region's transition.<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>  public static final String MASTER_META_TRANSITION_HANDLER_COUNT =<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>      "hbase.master.meta.transition.handler.count";<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  public static final int MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT = 1;<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  /** Conf key for enabling meta replication */<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>  public static final String USE_META_REPLICAS = "hbase.meta.replicas.use";<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>  public static final boolean DEFAULT_USE_META_REPLICAS = false;<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>  public static final String META_REPLICAS_NUM = "hbase.meta.replica.count";<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  public static final int DEFAULT_META_REPLICA_NUM = 1;<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * The name of the configuration parameter that specifies<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * the number of bytes in a newly created checksum chunk.<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   */<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>  public static final String BYTES_PER_CHECKSUM =<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>      "hbase.hstore.bytes.per.checksum";<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span><a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>  /**<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>   * The name of the configuration parameter that specifies<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>   * the name of an algorithm that is used to compute checksums<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>   * for newly created blocks.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>   */<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>  public static final String CHECKSUM_TYPE_NAME =<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>      "hbase.hstore.checksum.algorithm";<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span><a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>  /** Enable file permission modification from standard hbase */<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>  public static final String ENABLE_DATA_FILE_UMASK = "hbase.data.umask.enable";<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>  /** File permission umask to use when creating hbase data files */<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>  public static final String DATA_FILE_UMASK_KEY = "hbase.data.umask";<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span><a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  /** Configuration name of WAL Compression */<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>  public static final String ENABLE_WAL_COMPRESSION =<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    "hbase.regionserver.wal.enablecompression";<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span><a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>  /** Configuration name of WAL storage policy<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>   * Valid values are: HOT, COLD, WARM, ALL_SSD, ONE_SSD, LAZY_PERSIST<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>   * See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html*/<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>  public static final String WAL_STORAGE_POLICY = "hbase.wal.storage.policy";<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>  /**<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>   * "NONE" is not a valid storage policy and means we defer the policy to HDFS. @see<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>   * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20691"&gt;HBASE-20691&lt;/a&gt;<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>   */<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>  public static final String DEFER_TO_HDFS_STORAGE_POLICY = "NONE";<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>  /** By default we defer the WAL storage policy to HDFS */<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>  public static final String DEFAULT_WAL_STORAGE_POLICY = DEFER_TO_HDFS_STORAGE_POLICY;<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span><a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  /** Region in Transition metrics threshold time */<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.1175"></a>
 <span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>  /** delimiter used between portions of a region name */<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>  public static final int DELIMITER = ',';<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  /**<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>   * QOS attributes: these attributes are used to demarcate RPC call processing<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>   * by different set of handlers. For example, HIGH_QOS tagged methods are<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>   * handled by high priority handlers.<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>   */<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>  // normal_QOS &lt; replication_QOS &lt; replay_QOS &lt; QOS_threshold &lt; admin_QOS &lt; high_QOS &lt; meta_QOS<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>  public static final int PRIORITY_UNSET = -1;<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  public static final int NORMAL_QOS = 0;<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>  public static final int REPLICATION_QOS = 5;<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  public static final int REPLAY_QOS = 6;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>  public static final int QOS_THRESHOLD = 10;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>  public static final int ADMIN_QOS = 100;<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>  public static final int HIGH_QOS = 200;<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>  public static final int SYSTEMTABLE_QOS = HIGH_QOS;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  /**<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   * @deprecated the name "META_QOS" is a bit ambiguous, actually only meta region transition can<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   *             use this priority, and you should not use this directly. Will be removed in 3.0.0.<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>   */<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>  @Deprecated<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>  public static final int META_QOS = 300;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span><a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>  /** Directory under /hbase where archived hfiles are stored */<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>  public static final String HFILE_ARCHIVE_DIRECTORY = "archive";<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>  /**<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   * Name of the directory to store all snapshots. See SnapshotDescriptionUtils for<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   * remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>   * uni-directional.<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  public static final String SNAPSHOT_DIR_NAME = ".hbase-snapshot";<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  /* Name of old snapshot directory. See HBASE-8352 for details on why it needs to be renamed */<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  public static final String OLD_SNAPSHOT_DIR_NAME = ".snapshot";<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span><a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  /** Temporary directory used for table creation and deletion */<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>  public static final String HBASE_TEMP_DIRECTORY = ".tmp";<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  /**<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * The period (in milliseconds) between computing region server point in time metrics<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  public static final String REGIONSERVER_METRICS_PERIOD = "hbase.regionserver.metrics.period";<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>  public static final long DEFAULT_REGIONSERVER_METRICS_PERIOD = 5000;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  /** Directories that are not HBase table directories */<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>  public static final List&lt;String&gt; HBASE_NON_TABLE_DIRS =<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    Collections.unmodifiableList(Arrays.asList(new String[] {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      HBCK_SIDELINEDIR_NAME, HBASE_TEMP_DIRECTORY, MIGRATION_NAME<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    }));<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span><a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>  /**<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>   * Directories that are not HBase user table directories.<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>   * @deprecated Since hbase-2.3.0; no replacement as not used any more (internally at least)<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>   */<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>  @Deprecated<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>  public static final List&lt;String&gt; HBASE_NON_USER_TABLE_DIRS =<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    Collections.unmodifiableList(Arrays.asList((String[])ArrayUtils.addAll(<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      new String[] { TableName.META_TABLE_NAME.getNameAsString() },<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      HBASE_NON_TABLE_DIRS.toArray())));<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span><a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>  /** Health script related settings. */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  public static final String HEALTH_SCRIPT_LOC = "hbase.node.health.script.location";<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  public static final String HEALTH_SCRIPT_TIMEOUT = "hbase.node.health.script.timeout";<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  public static final String HEALTH_CHORE_WAKE_FREQ =<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>      "hbase.node.health.script.frequency";<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>  public static final long DEFAULT_HEALTH_SCRIPT_TIMEOUT = 60000;<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  /**<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * The maximum number of health check failures a server can encounter consecutively.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public static final String HEALTH_FAILURE_THRESHOLD =<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>      "hbase.node.health.failure.threshold";<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>  public static final int DEFAULT_HEALTH_FAILURE_THRESHOLD = 3;<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span><a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  public static final String EXECUTOR_STATUS_COLLECT_ENABLED =<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      "hbase.executors.status.collect.enabled";<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>  public static final boolean DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED = 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>   * Setting to activate, or not, the publication of the status by the master. Default<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   *  notification is by a multicast message.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   */<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  public static final String STATUS_PUBLISHED = "hbase.status.published";<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  public static final boolean STATUS_PUBLISHED_DEFAULT = false;<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span><a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>  /**<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>   * IP to use for the multicast status messages between the master and the clients.<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>   * The default address is chosen as one among others within the ones suitable for multicast<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>   * messages.<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>   */<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>  public static final String STATUS_MULTICAST_ADDRESS = "hbase.status.multicast.address.ip";<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>  public static final String DEFAULT_STATUS_MULTICAST_ADDRESS = "226.1.1.3";<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span><a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>  /**<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   * The address to use for binding the local socket for receiving multicast. Defaults to<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>   * 0.0.0.0.<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-9961"&gt;HBASE-9961&lt;/a&gt;<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  public static final String STATUS_MULTICAST_BIND_ADDRESS =<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      "hbase.status.multicast.bind.address.ip";<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  public static final String DEFAULT_STATUS_MULTICAST_BIND_ADDRESS = "0.0.0.0";<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span><a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  /**<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * The port to use for the multicast messages.<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   */<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>  public static final String STATUS_MULTICAST_PORT = "hbase.status.multicast.address.port";<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  public static final int DEFAULT_STATUS_MULTICAST_PORT = 16100;<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span><a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  /**<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   * The network interface name to use for the multicast messages.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   */<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>  public static final String STATUS_MULTICAST_NI_NAME = "hbase.status.multicast.ni.name";<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span><a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  /**<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   * The address to use for binding the local socket for sending multicast. Defaults to 0.0.0.0.<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   */<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  public static final String STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS =<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    "hbase.status.multicast.publisher.bind.address.ip";<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  public static final String DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS = "0.0.0.0";<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span><a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>  public static final long NO_NONCE = 0;<a name="line.1296"></a>
+<span class="sourceLineNo">1177</span>  public static final String LOAD_BALANCER_SLOP_KEY = "hbase.regions.slop";<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span><a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>  /** delimiter used between portions of a region name */<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>  public static final int DELIMITER = ',';<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span><a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>  /**<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>   * QOS attributes: these attributes are used to demarcate RPC call processing<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>   * by different set of handlers. For example, HIGH_QOS tagged methods are<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>   * handled by high priority handlers.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>   */<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>  // normal_QOS &lt; replication_QOS &lt; replay_QOS &lt; QOS_threshold &lt; admin_QOS &lt; high_QOS &lt; meta_QOS<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  public static final int PRIORITY_UNSET = -1;<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>  public static final int NORMAL_QOS = 0;<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  public static final int REPLICATION_QOS = 5;<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>  public static final int REPLAY_QOS = 6;<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  public static final int QOS_THRESHOLD = 10;<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>  public static final int ADMIN_QOS = 100;<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  public static final int HIGH_QOS = 200;<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  public static final int SYSTEMTABLE_QOS = HIGH_QOS;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>  /**<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @deprecated the name "META_QOS" is a bit ambiguous, actually only meta region transition can<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   *             use this priority, and you should not use this directly. Will be removed in 3.0.0.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   */<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @Deprecated<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public static final int META_QOS = 300;<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span><a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  /** Directory under /hbase where archived hfiles are stored */<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  public static final String HFILE_ARCHIVE_DIRECTORY = "archive";<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  /**<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   * Name of the directory to store all snapshots. See SnapshotDescriptionUtils for<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   * remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>   * uni-directional.<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>   */<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>  public static final String SNAPSHOT_DIR_NAME = ".hbase-snapshot";<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span><a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>  /* Name of old snapshot directory. See HBASE-8352 for details on why it needs to be renamed */<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>  public static final String OLD_SNAPSHOT_DIR_NAME = ".snapshot";<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span><a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>  /** Temporary directory used for table creation and deletion */<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  public static final String HBASE_TEMP_DIRECTORY = ".tmp";<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  /**<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>   * The period (in milliseconds) between computing region server point in time metrics<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>   */<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>  public static final String REGIONSERVER_METRICS_PERIOD = "hbase.regionserver.metrics.period";<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  public static final long DEFAULT_REGIONSERVER_METRICS_PERIOD = 5000;<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>  /** Directories that are not HBase table directories */<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  public static final List&lt;String&gt; HBASE_NON_TABLE_DIRS =<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    Collections.unmodifiableList(Arrays.asList(new String[] {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      HBCK_SIDELINEDIR_NAME, HBASE_TEMP_DIRECTORY, MIGRATION_NAME<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    }));<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  /**<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>   * Directories that are not HBase user table directories.<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>   * @deprecated Since hbase-2.3.0; no replacement as not used any more (internally at least)<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>   */<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>  @Deprecated<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>  public static final List&lt;String&gt; HBASE_NON_USER_TABLE_DIRS =<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>    Collections.unmodifiableList(Arrays.asList((String[])ArrayUtils.addAll(<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      new String[] { TableName.META_TABLE_NAME.getNameAsString() },<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      HBASE_NON_TABLE_DIRS.toArray())));<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span><a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>  /** Health script related settings. */<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>  public static final String HEALTH_SCRIPT_LOC = "hbase.node.health.script.location";<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  public static final String HEALTH_SCRIPT_TIMEOUT = "hbase.node.health.script.timeout";<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>  public static final String HEALTH_CHORE_WAKE_FREQ =<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      "hbase.node.health.script.frequency";<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  public static final long DEFAULT_HEALTH_SCRIPT_TIMEOUT = 60000;<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>   * The maximum number of health check failures a server can encounter consecutively.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>  public static final String HEALTH_FAILURE_THRESHOLD =<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      "hbase.node.health.failure.threshold";<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>  public static final int DEFAULT_HEALTH_FAILURE_THRESHOLD = 3;<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span><a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  public static final String EXECUTOR_STATUS_COLLECT_ENABLED =<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>      "hbase.executors.status.collect.enabled";<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  public static final boolean DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED = true;<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span><a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>  /**<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   * Setting to activate, or not, the publication of the status by the master. Default<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   *  notification is by a multicast message.<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   */<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>  public static final String STATUS_PUBLISHED = "hbase.status.published";<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  public static final boolean STATUS_PUBLISHED_DEFAULT = false;<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span><a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>  /**<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>   * IP to use for the multicast status messages between the master and the clients.<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>   * The default address is chosen as one among others within the ones suitable for multicast<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>   * messages.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>   */<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>  public static final String STATUS_MULTICAST_ADDRESS = "hbase.status.multicast.address.ip";<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>  public static final String DEFAULT_STATUS_MULTICAST_ADDRESS = "226.1.1.3";<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>   * The address to use for binding the local socket for receiving multicast. Defaults to<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * 0.0.0.0.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-9961"&gt;HBASE-9961&lt;/a&gt;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   */<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>  public static final String STATUS_MULTICAST_BIND_ADDRESS =<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>      "hbase.status.multicast.bind.address.ip";<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  public static final String DEFAULT_STATUS_MULTICAST_BIND_ADDRESS = "0.0.0.0";<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>  /**<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>   * The port to use for the multicast messages.<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  public static final String STATUS_MULTICAST_PORT = "hbase.status.multicast.address.port";<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  public static final int DEFAULT_STATUS_MULTICAST_PORT = 16100;<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>   * The network interface name to use for the multicast messages.<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  public static final String STATUS_MULTICAST_NI_NAME = "hbase.status.multicast.ni.name";<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span><a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>  /**<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * The address to use for binding the local socket for sending multicast. Defaults to 0.0.0.0.<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  public static final String STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS =<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    "hbase.status.multicast.publisher.bind.address.ip";<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>  public static final String DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS = "0.0.0.0";<a name="line.1296"></a>
 <span class="sourceLineNo">1297</span><a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  /** Default cipher for encryption */<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>  public static final String CIPHER_AES = "AES";<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>  /** Configuration key for the crypto algorithm provider, a class name */<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>  public static final String CRYPTO_CIPHERPROVIDER_CONF_KEY = "hbase.crypto.cipherprovider";<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>  /** Configuration key for the crypto key provider, a class name */<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  public static final String CRYPTO_KEYPROVIDER_CONF_KEY = "hbase.crypto.keyprovider";<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /** Configuration key for the crypto key provider parameters */<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>  public static final String CRYPTO_KEYPROVIDER_PARAMETERS_KEY =<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      "hbase.crypto.keyprovider.parameters";<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span><a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>  /** Configuration key for the name of the master key for the cluster, a string */<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  public static final String CRYPTO_MASTERKEY_NAME_CONF_KEY = "hbase.crypto.master.key.name";<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /** Configuration key for the name of the alternate master key for the cluster, a string */<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  public static final String CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY =<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    "hbase.crypto.master.alternate.key.name";<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span><a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>  /** Configuration key for the algorithm to use when encrypting the WAL, a string */<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  public static final String CRYPTO_WAL_ALGORITHM_CONF_KEY = "hbase.crypto.wal.algorithm";<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  /** Configuration key for the name of the master WAL encryption key for the cluster, a string */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  public static final String CRYPTO_WAL_KEY_NAME_CONF_KEY = "hbase.crypto.wal.key.name";<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  /** Configuration key for the algorithm used for creating jks key, a string */<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>  public static final String CRYPTO_KEY_ALGORITHM_CONF_KEY = "hbase.crypto.key.algorithm";<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span><a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  /** Configuration key for the name of the alternate cipher algorithm for the cluster, a string */<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>  public static final String CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY =<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      "hbase.crypto.alternate.key.algorithm";<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span><a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>  /** Configuration key for enabling WAL encryption, a boolean */<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  public static final String ENABLE_WAL_ENCRYPTION = "hbase.regionserver.wal.encryption";<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  /** Configuration key for setting RPC codec class name */<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>  public static final String RPC_CODEC_CONF_KEY = "hbase.client.rpc.codec";<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span><a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>  /** Configuration key for setting replication codec class name */<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>  public static final String REPLICATION_CODEC_CONF_KEY = "hbase.replication.rpc.codec";<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>  public static final String REPLICATION_SOURCE_MAXTHREADS_KEY =<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      "hbase.replication.source.maxthreads";<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span><a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>  /**<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   * Drop edits for tables that been deleted from the replication source and target<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>   * @deprecated moved it into HBaseInterClusterReplicationEndpoint<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>   */<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  @Deprecated<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>  public static final String REPLICATION_DROP_ON_DELETED_TABLE_KEY =<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      "hbase.replication.drop.on.deleted.table";<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span><a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>  public static final int REPLICATION_SOURCE_MAXTHREADS_DEFAULT = 10;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>  /** Configuration key for SplitLog manager timeout */<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>  public static final String HBASE_SPLITLOG_MANAGER_TIMEOUT = "hbase.splitlog.manager.timeout";<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span><a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>  /**<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   * Configuration keys for Bucket cache<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>   */<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>  // TODO moving these bucket cache implementation specific configs to this level is violation of<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>  // encapsulation. But as these has to be referred from hbase-common and bucket cache<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>  // sits in hbase-server, there were no other go! Can we move the cache implementation to<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>  // hbase-common?<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>   * Current ioengine options in include: heap, offheap and file:PATH (where PATH is the path<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   * to the file that will host the file-based cache.  See BucketCache#getIOEngineFromName() for<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>   * list of supported ioengine options.<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   * &lt;p&gt;Set this option and a non-zero {@link #BUCKET_CACHE_SIZE_KEY} to enable bucket cache.<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>   */<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  public static final String BUCKET_CACHE_IOENGINE_KEY = "hbase.bucketcache.ioengine";<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span><a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>  /**<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>   * When using bucket cache, this is a float that EITHER represents a percentage of total heap<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>   * memory size to give to the cache (if &amp;lt; 1.0) OR, it is the capacity in<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>   * megabytes of the cache.<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>   */<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>  public static final String BUCKET_CACHE_SIZE_KEY = "hbase.bucketcache.size";<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>   * HConstants for fast fail on the client side follow<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>  /**<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>   * Config for enabling/disabling the fast fail mode.<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>   */<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>  @Deprecated<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>  public static final String HBASE_CLIENT_FAST_FAIL_MODE_ENABLED =<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    "hbase.client.fast.fail.mode.enabled";<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span><a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>  /**<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>   */<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>  @Deprecated<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>  public static final boolean HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT = false;<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span><a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>  /**<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>   */<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>  @Deprecated<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>  public static final String HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS =<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    "hbase.client.fastfail.threshold";<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>  /**<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>   */<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  @Deprecated<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  public static final long HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT = 60000;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>  /**<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  @Deprecated<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>  public static final String HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS =<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    "hbase.client.failure.map.cleanup.interval";<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  /**<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>   */<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>  @Deprecated<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>  public static final long HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT = 600000;<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>   */<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>  @Deprecated<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>  public static final String HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS =<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    "hbase.client.fast.fail.cleanup.duration";<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>   */<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>  @Deprecated<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>  public static final long HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT = 600000;<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>  /**<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   */<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>  @Deprecated<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  public static final String HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL =<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    "hbase.client.fast.fail.interceptor.impl";<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span><a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>  /**<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0, replaced by procedure-based<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>   *   distributed WAL splitter; see SplitWALManager.<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>   */<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>  @Deprecated<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>  public static final String HBASE_SPLIT_WAL_COORDINATED_BY_ZK = "hbase.split.wal.zk.coordinated";<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>  /**<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0.<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>   */<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>  @Deprecated<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  public static final boolean DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK = false;<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  public static final String HBASE_SPLIT_WAL_MAX_SPLITTER = "hbase.regionserver.wal.max.splitters";<a name="line.1466"></a>
+<span class="sourceLineNo">1298</span>  public static final long NO_NONCE = 0;<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span><a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>  /** Default cipher for encryption */<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  public static final String CIPHER_AES = "AES";<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  /** Configuration key for the crypto algorithm provider, a class name */<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  public static final String CRYPTO_CIPHERPROVIDER_CONF_KEY = "hbase.crypto.cipherprovider";<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  /** Configuration key for the crypto key provider, a class name */<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>  public static final String CRYPTO_KEYPROVIDER_CONF_KEY = "hbase.crypto.keyprovider";<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span><a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>  /** Configuration key for the crypto key provider parameters */<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  public static final String CRYPTO_KEYPROVIDER_PARAMETERS_KEY =<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>      "hbase.crypto.keyprovider.parameters";<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span><a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>  /** Configuration key for the name of the master key for the cluster, a string */<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>  public static final String CRYPTO_MASTERKEY_NAME_CONF_KEY = "hbase.crypto.master.key.name";<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span><a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>  /** Configuration key for the name of the alternate master key for the cluster, a string */<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>  public static final String CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY =<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    "hbase.crypto.master.alternate.key.name";<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  /** Configuration key for the algorithm to use when encrypting the WAL, a string */<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>  public static final String CRYPTO_WAL_ALGORITHM_CONF_KEY = "hbase.crypto.wal.algorithm";<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span><a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>  /** Configuration key for the name of the master WAL encryption key for the cluster, a string */<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>  public static final String CRYPTO_WAL_KEY_NAME_CONF_KEY = "hbase.crypto.wal.key.name";<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span><a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>  /** Configuration key for the algorithm used for creating jks key, a string */<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>  public static final String CRYPTO_KEY_ALGORITHM_CONF_KEY = "hbase.crypto.key.algorithm";<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span><a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>  /** Configuration key for the name of the alternate cipher algorithm for the cluster, a string */<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>  public static final String CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY =<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>      "hbase.crypto.alternate.key.algorithm";<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span><a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  /** Configuration key for enabling WAL encryption, a boolean */<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>  public static final String ENABLE_WAL_ENCRYPTION = "hbase.regionserver.wal.encryption";<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span><a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  /** Configuration key for setting RPC codec class name */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>  public static final String RPC_CODEC_CONF_KEY = "hbase.client.rpc.codec";<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span><a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>  /** Configuration key for setting replication codec class name */<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>  public static final String REPLICATION_CODEC_CONF_KEY = "hbase.replication.rpc.codec";<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span><a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>  public static final String REPLICATION_SOURCE_MAXTHREADS_KEY =<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      "hbase.replication.source.maxthreads";<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>   * Drop edits for tables that been deleted from the replication source and target<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   * @deprecated moved it into HBaseInterClusterReplicationEndpoint<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>   */<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  @Deprecated<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>  public static final String REPLICATION_DROP_ON_DELETED_TABLE_KEY =<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>      "hbase.replication.drop.on.deleted.table";<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span><a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>  public static final int REPLICATION_SOURCE_MAXTHREADS_DEFAULT = 10;<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span><a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>  /** Configuration key for SplitLog manager timeout */<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>  public static final String HBASE_SPLITLOG_MANAGER_TIMEOUT = "hbase.splitlog.manager.timeout";<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span><a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>  /**<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   * Configuration keys for Bucket cache<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   */<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>  // TODO moving these bucket cache implementation specific configs to this level is violation of<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>  // encapsulation. But as these has to be referred from hbase-common and bucket cache<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>  // sits in hbase-server, there were no other go! Can we move the cache implementation to<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  // hbase-common?<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>   * Current ioengine options in include: heap, offheap and file:PATH (where PATH is the path<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>   * to the file that will host the file-based cache.  See BucketCache#getIOEngineFromName() for<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>   * list of supported ioengine options.<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>   * &lt;p&gt;Set this option and a non-zero {@link #BUCKET_CACHE_SIZE_KEY} to enable bucket cache.<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>   */<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>  public static final String BUCKET_CACHE_IOENGINE_KEY = "hbase.bucketcache.ioengine";<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>  /**<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>   * When using bucket cache, this is a float that EITHER represents a percentage of total heap<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>   * memory size to give to the cache (if &amp;lt; 1.0) OR, it is the capacity in<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>   * megabytes of the cache.<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>   */<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  public static final String BUCKET_CACHE_SIZE_KEY = "hbase.bucketcache.size";<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span><a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>  /**<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>   * HConstants for fast fail on the client side follow<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>   */<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>  /**<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   * Config for enabling/disabling the fast fail mode.<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>   */<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>  @Deprecated<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>  public static final String HBASE_CLIENT_FAST_FAIL_MODE_ENABLED =<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    "hbase.client.fast.fail.mode.enabled";<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>  /**<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>   */<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>  @Deprecated<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>  public static final boolean HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT = false;<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>  /**<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>   */<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  @Deprecated<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>  public static final String HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS =<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>    "hbase.client.fastfail.threshold";<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>   */<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>  @Deprecated<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>  public static final long HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT = 60000;<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span><a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>  /**<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>   */<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>  @Deprecated<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>  public static final String HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS =<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    "hbase.client.failure.map.cleanup.interval";<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>  /**<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>   */<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>  @Deprecated<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>  public static final long HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT = 600000;<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span><a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>  /**<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>   */<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>  @Deprecated<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>  public static final String HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS =<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>    "hbase.client.fast.fail.cleanup.duration";<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>  /**<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>   */<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  @Deprecated<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>  public static final long HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT = 600000;<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span><a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>  /**<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>   */<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  @Deprecated<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>  public static final String HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL =<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    "hbase.client.fast.fail.interceptor.impl";<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>  /**<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0, replaced by procedure-based<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>   *   distributed WAL splitter; see SplitWALManager.<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>   */<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>  @Deprecated<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>  public static final String HBASE_SPLIT_WAL_COORDINATED_BY_ZK = "hbase.split.wal.zk.coordinated";<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>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0.<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   */<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  @Deprecated<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>  public static final boolean DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK = false;<a name="line.1466"></a>
 <span class="sourceLineNo">1467</span><a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>  public static final int DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER = 2;<a name="line.1468"></a>
+<span class="sourceLineNo">1468</span>  public static final String HBASE_SPLIT_WAL_MAX_SPLITTER = "hbase.regionserver.wal.max.splitters";<a name="line.1468"></a>
 <span class="sourceLineNo">1469</span><a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  /** Config key for if the server should send backpressure and if the client should listen to<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>   * that backpressure from the server */<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  public static final String ENABLE_CLIENT_BACKPRESSURE = "hbase.client.backpressure.enabled";<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>  public static final boolean DEFAULT_ENABLE_CLIENT_BACKPRESSURE = false;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span><a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>  public static final String HEAP_OCCUPANCY_LOW_WATERMARK_KEY =<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      "hbase.heap.occupancy.low_water_mark";<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>  public static final float DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK = 0.95f;<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  public static final String HEAP_OCCUPANCY_HIGH_WATERMARK_KEY =<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      "hbase.heap.occupancy.high_water_mark";<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  public static final float DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK = 0.98f;<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  /**<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   * The max number of threads used for splitting storefiles in parallel during<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   * the region split process.<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   */<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>  public static final String REGION_SPLIT_THREADS_MAX =<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>    "hbase.regionserver.region.split.threads.max";<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span><a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>  /** Canary config keys */<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>  // TODO: Move these defines to Canary Class<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  public static final String HBASE_CANARY_WRITE_DATA_TTL_KEY = "hbase.canary.write.data.ttl";<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY =<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      "hbase.canary.write.perserver.regions.lowerLimit";<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span><a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY =<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>      "hbase.canary.write.perserver.regions.upperLimit";<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span><a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>  public static final String HBASE_CANARY_WRITE_VALUE_SIZE_KEY = "hbase.canary.write.value.size";<a name="line.1499"></a>
+<span class="sourceLineNo">1470</span>  public static final int DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER = 2;<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span><a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  /** Config key for if the server should send backpressure and if the client should listen to<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   * that backpressure from the server */<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>  public static final String ENABLE_CLIENT_BACKPRESSURE = "hbase.client.backpressure.enabled";<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  public static final boolean DEFAULT_ENABLE_CLIENT_BACKPRESSURE = false;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  public static final String HEAP_OCCUPANCY_LOW_WATERMARK_KEY =<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      "hbase.heap.occupancy.low_water_mark";<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>  public static final float DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK = 0.95f;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>  public static final String HEAP_OCCUPANCY_HIGH_WATERMARK_KEY =<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>      "hbase.heap.occupancy.high_water_mark";<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>  public static final float DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK = 0.98f;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span><a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>  /**<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   * The max number of threads used for splitting storefiles in parallel during<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   * the region split process.<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   */<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>  public static final String REGION_SPLIT_THREADS_MAX =<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    "hbase.regionserver.region.split.threads.max";<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span><a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>  /** Canary config keys */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  // TODO: Move these defines to Canary Class<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  public static final String HBASE_CANARY_WRITE_DATA_TTL_KEY = "hbase.canary.write.data.ttl";<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY =<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>      "hbase.canary.write.perserver.regions.lowerLimit";<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span><a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY =<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      "hbase.canary.write.perserver.regions.upperLimit";<a name="line.1499"></a>
 <span class="sourceLineNo">1500</span><a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  public static final String HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY =<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      "hbase.canary.write.table.check.period";<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span><a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>  public static final String HBASE_CANARY_READ_RAW_SCAN_KEY = "hbase.canary.read.raw.enabled";<a name="line.1504"></a>
+<span class="sourceLineNo">1501</span>  public static final String HBASE_CANARY_WRITE_VALUE_SIZE_KEY = "hbase.canary.write.value.size";<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  public static final String HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY =<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      "hbase.canary.write.table.check.period";<a name="line.1504"></a>
 <span class="sourceLineNo">1505</span><a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>  public static final String HBASE_CANARY_READ_ALL_CF = "hbase.canary.read.all.column.famliy";<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  /**<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>   * Configuration keys for programmatic JAAS configuration for secured ZK interaction<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>   */<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  public static final String ZK_CLIENT_KEYTAB_FILE = "hbase.zookeeper.client.keytab.file";<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>  public static final String ZK_CLIENT_KERBEROS_PRINCIPAL =<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>      "hbase.zookeeper.client.kerberos.principal";<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>  public static final String ZK_SERVER_KEYTAB_FILE = "hbase.zookeeper.server.keytab.file";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>  public static final String ZK_SERVER_KERBEROS_PRINCIPAL =<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      "hbase.zookeeper.server.kerberos.principal";<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span><a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>  /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>   */<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span><a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span><a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>  // Default TTL - FOREVER<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>  public static final long DEFAULT_SNAPSHOT_TTL = 0;<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span><a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>  // User defined Default TTL config key<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public static final String DEFAULT_SNAPSHOT_TTL_CONFIG_KEY = "hbase.master.snapshot.ttl";<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>  // Regions Recovery based on high storeFileRefCount threshold value<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>  public static final String STORE_FILE_REF_COUNT_THRESHOLD =<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>    "hbase.regions.recovery.store.file.ref.count";<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // default -1 indicates there is no threshold on high storeRefCount<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  public static final int DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD = -1;<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span><a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  public static final String REGIONS_RECOVERY_INTERVAL =<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    "hbase.master.regions.recovery.check.interval";<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>  public static final int DEFAULT_REGIONS_RECOVERY_INTERVAL = 1200 * 1000; // Default 20 min<a name="line.1557"></a>
+<span class="sourceLineNo">1506</span>  public static final String HBASE_CANARY_READ_RAW_SCAN_KEY = "hbase.canary.read.raw.enabled";<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span><a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>  public static final String HBASE_CANARY_READ_ALL_CF = "hbase.canary.read.all.column.famliy";<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>   * Configuration keys for programmatic JAAS configuration for secured ZK interaction<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>   */<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>  public static final String ZK_CLIENT_KEYTAB_FILE = "hbase.zookeeper.client.keytab.file";<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>  public static final String ZK_CLIENT_KERBEROS_PRINCIPAL =<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      "hbase.zookeeper.client.kerberos.principal";<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  public static final String ZK_SERVER_KEYTAB_FILE = "hbase.zookeeper.server.keytab.file";<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>  public static final String ZK_SERVER_KERBEROS_PRINCIPAL =<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      "hbase.zookeeper.server.kerberos.principal";<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span><a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<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>   * Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>   */<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span><a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span><a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>  // Default TTL - FOREVER<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>  public static final long DEFAULT_SNAPSHOT_TTL = 0;<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span><a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>  // User defined Default TTL config key<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>  public static final String DEFAULT_SNAPSHOT_TTL_CONFIG_KEY = "hbase.master.snapshot.ttl";<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span><a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>  // Regions Recovery based on high storeFileRefCount threshold value<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public static final String STORE_FILE_REF_COUNT_THRESHOLD =<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    "hbase.regions.recovery.store.file.ref.count";<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span><a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  // default -1 indicates there is no threshold on high storeRefCount<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  public static final int DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD = -1;<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  public static final String REGIONS_RECOVERY_INTERVAL =<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>    "hbase.master.regions.recovery.check.interval";<a name="line.1557"></a>
 <span class="sourceLineNo">1558</span><a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>  /**<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>   * Configurations for master executor services.<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>   */<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>  public static final String MASTER_OPEN_REGION_THREADS =<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      "hbase.master.executor.openregion.threads";<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>  public static final int MASTER_OPEN_REGION_THREADS_DEFAULT = 5;<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span><a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>  public static final String MASTER_CLOSE_REGION_THREADS =<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      "hbase.master.executor.closeregion.threads";<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>  public static final int MASTER_CLOSE_REGION_THREADS_DEFAULT = 5;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  public static final String MASTER_SERVER_OPERATIONS_THREADS =<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      "hbase.master.executor.serverops.threads";<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  public static final int MASTER_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  public static final String MASTER_META_SERVER_OPERATIONS_THREADS =<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      "hbase.master.executor.meta.serverops.threads";<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  public static final int MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span><a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  public static final String MASTER_LOG_REPLAY_OPS_THREADS =<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      "hbase.master.executor.logreplayops.threads";<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  public static final int MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT = 10;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span><a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>  public static final int DEFAULT_SLOW_LOG_RING_BUFFER_SIZE = 256;<a name="line.1582"></a>
+<span class="sourceLineNo">1559</span>  public static final int DEFAULT_REGIONS_RECOVERY_INTERVAL = 1200 * 1000; // Default 20 min<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span><a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>  /**<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>   * Configurations for master executor services.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>   */<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>  public static final String MASTER_OPEN_REGION_THREADS =<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>      "hbase.master.executor.openregion.threads";<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  public static final int MASTER_OPEN_REGION_THREADS_DEFAULT = 5;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span><a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>  public static final String MASTER_CLOSE_REGION_THREADS =<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      "hbase.master.executor.closeregion.threads";<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>  public static final int MASTER_CLOSE_REGION_THREADS_DEFAULT = 5;<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>  public static final String MASTER_SERVER_OPERATIONS_THREADS =<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      "hbase.master.executor.serverops.threads";<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>  public static final int MASTER_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span><a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>  public static final String MASTER_META_SERVER_OPERATIONS_THREADS =<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      "hbase.master.executor.meta.serverops.threads";<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>  public static final int MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>  public static final String MASTER_LOG_REPLAY_OPS_THREADS =<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      "hbase.master.executor.logreplayops.threads";<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  public static final int MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT = 10;<a name="line.1582"></a>
 <span class="sourceLineNo">1583</span><a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  public static final String SLOW_LOG_BUFFER_ENABLED_KEY =<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    "hbase.regionserver.slowlog.buffer.enabled";<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  public static final boolean DEFAULT_ONLINE_LOG_PROVIDER_ENABLED = false;<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span><a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>  /** The slowlog info family as a string*/<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private static final String SLOWLOG_INFO_FAMILY_STR = "info";<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>  /** The slowlog info family */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public static final byte [] SLOWLOG_INFO_FAMILY = Bytes.toBytes(SLOWLOG_INFO_FAMILY_STR);<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>  public static final String SLOW_LOG_SYS_TABLE_ENABLED_KEY =<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    "hbase.regionserver.slowlog.systable.enabled";<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>  public static final boolean DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY = false;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>  /**<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>   */<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  public static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span><a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>  /**<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   * Default value of {@link #BATCH_ROWS_THRESHOLD_NAME}<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>   */<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  public static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>  private HConstants() {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // Can't be instantiated with this ctor.<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">1584</span>  public static final int DEFAULT_SLOW_LOG_RING_BUFFER_SIZE = 256;<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>  public static final String SLOW_LOG_BUFFER_ENABLED_KEY =<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    "hbase.regionserver.slowlog.buffer.enabled";<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>  public static final boolean DEFAULT_ONLINE_LOG_PROVIDER_ENABLED = false;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span><a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>  /** The slowlog info family as a string*/<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>  private static final String SLOWLOG_INFO_FAMILY_STR = "info";<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span><a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  /** The slowlog info family */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  public static final byte [] SLOWLOG_INFO_FAMILY = Bytes.toBytes(SLOWLOG_INFO_FAMILY_STR);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>  public static final String SLOW_LOG_SYS_TABLE_ENABLED_KEY =<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    "hbase.regionserver.slowlog.systable.enabled";<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public static final boolean DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY = false;<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span><a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>  /**<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>   */<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>  public static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<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>   * Default value of {@link #BATCH_ROWS_THRESHOLD_NAME}<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>   */<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>  public static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  private HConstants() {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    // Can't be instantiated with this ctor.<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>}<a name="line.1613"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html b/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html
index abccdb5..1e32c44 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/HConstants.html
@@ -989,634 +989,636 @@
 <span class="sourceLineNo">981</span>   */<a name="line.981"></a>
 <span class="sourceLineNo">982</span>  public static final String<a name="line.982"></a>
 <span class="sourceLineNo">983</span>      REPLICATION_SOURCE_SERVICE_CLASSNAME = "hbase.replication.source.service";<a name="line.983"></a>
-<span class="sourceLineNo">984</span>  public static final String<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      REPLICATION_SINK_SERVICE_CLASSNAME = "hbase.replication.sink.service";<a name="line.985"></a>
-<span class="sourceLineNo">986</span>  public static final String REPLICATION_SERVICE_CLASSNAME_DEFAULT =<a name="line.986"></a>
-<span class="sourceLineNo">987</span>    "org.apache.hadoop.hbase.replication.regionserver.Replication";<a name="line.987"></a>
-<span class="sourceLineNo">988</span>  public static final String REPLICATION_BULKLOAD_ENABLE_KEY = "hbase.replication.bulkload.enabled";<a name="line.988"></a>
-<span class="sourceLineNo">989</span>  public static final boolean REPLICATION_BULKLOAD_ENABLE_DEFAULT = false;<a name="line.989"></a>
-<span class="sourceLineNo">990</span>  /** Replication cluster id of source cluster which uniquely identifies itself with peer cluster */<a name="line.990"></a>
-<span class="sourceLineNo">991</span>  public static final String REPLICATION_CLUSTER_ID = "hbase.replication.cluster.id";<a name="line.991"></a>
-<span class="sourceLineNo">992</span>  /**<a name="line.992"></a>
-<span class="sourceLineNo">993</span>   * Max total size of buffered entries in all replication peers. It will prevent server getting<a name="line.993"></a>
-<span class="sourceLineNo">994</span>   * OOM if there are many peers. Default value is 256MB which is four times to default<a name="line.994"></a>
-<span class="sourceLineNo">995</span>   * replication.source.size.capacity.<a name="line.995"></a>
-<span class="sourceLineNo">996</span>   */<a name="line.996"></a>
-<span class="sourceLineNo">997</span>  public static final String REPLICATION_SOURCE_TOTAL_BUFFER_KEY = "replication.total.buffer.quota";<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>  public static final int REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT = 256 * 1024 * 1024;<a name="line.999"></a>
+<span class="sourceLineNo">984</span>  public static final String REPLICATION_SERVICE_CLASSNAME_DEFAULT =<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    "org.apache.hadoop.hbase.replication.regionserver.Replication";<a name="line.985"></a>
+<span class="sourceLineNo">986</span>  public static final String<a name="line.986"></a>
+<span class="sourceLineNo">987</span>      REPLICATION_SINK_SERVICE_CLASSNAME = "hbase.replication.sink.service";<a name="line.987"></a>
+<span class="sourceLineNo">988</span>  public static final String REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT =<a name="line.988"></a>
+<span class="sourceLineNo">989</span>    "org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl";<a name="line.989"></a>
+<span class="sourceLineNo">990</span>  public static final String REPLICATION_BULKLOAD_ENABLE_KEY = "hbase.replication.bulkload.enabled";<a name="line.990"></a>
+<span class="sourceLineNo">991</span>  public static final boolean REPLICATION_BULKLOAD_ENABLE_DEFAULT = false;<a name="line.991"></a>
+<span class="sourceLineNo">992</span>  /** Replication cluster id of source cluster which uniquely identifies itself with peer cluster */<a name="line.992"></a>
+<span class="sourceLineNo">993</span>  public static final String REPLICATION_CLUSTER_ID = "hbase.replication.cluster.id";<a name="line.993"></a>
+<span class="sourceLineNo">994</span>  /**<a name="line.994"></a>
+<span class="sourceLineNo">995</span>   * Max total size of buffered entries in all replication peers. It will prevent server getting<a name="line.995"></a>
+<span class="sourceLineNo">996</span>   * OOM if there are many peers. Default value is 256MB which is four times to default<a name="line.996"></a>
+<span class="sourceLineNo">997</span>   * replication.source.size.capacity.<a name="line.997"></a>
+<span class="sourceLineNo">998</span>   */<a name="line.998"></a>
+<span class="sourceLineNo">999</span>  public static final String REPLICATION_SOURCE_TOTAL_BUFFER_KEY = "replication.total.buffer.quota";<a name="line.999"></a>
 <span class="sourceLineNo">1000</span><a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>  /** Configuration key for ReplicationSource shipeEdits timeout */<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>  public static final String REPLICATION_SOURCE_SHIPEDITS_TIMEOUT =<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>      "replication.source.shipedits.timeout";<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>  public static final int REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT = 60000;<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span><a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>  /**<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>   * Directory where the source cluster file system client configuration are placed which is used by<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>   * sink cluster to copy HFiles from source cluster file system<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>   */<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>  public static final String REPLICATION_CONF_DIR = "hbase.replication.conf.dir";<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span><a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>  /** Maximum time to retry for a failed bulk load request */<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>  public static final String BULKLOAD_MAX_RETRIES_NUMBER = "hbase.bulkload.retries.number";<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span><a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>  public static final String KEY_FOR_HOSTNAME_SEEN_BY_MASTER =<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    "hbase.regionserver.hostname.seen.by.master";<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span><a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>  public static final String HBASE_MASTER_LOGCLEANER_PLUGINS =<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>      "hbase.master.logcleaner.plugins";<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span><a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>  public static final String HBASE_REGION_SPLIT_POLICY_KEY =<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    "hbase.regionserver.region.split.policy";<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>  /** Whether nonces are enabled; default is true. */<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>  public static final String HBASE_RS_NONCES_ENABLED = "hbase.regionserver.nonces.enabled";<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span><a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>  /**<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>   * Configuration key for the size of the block cache<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>   */<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>  public static final String HFILE_BLOCK_CACHE_SIZE_KEY =<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>    "hfile.block.cache.size";<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>  public static final float HFILE_BLOCK_CACHE_SIZE_DEFAULT = 0.4f;<a name="line.1033"></a>
+<span class="sourceLineNo">1001</span>  public static final int REPLICATION_SOURCE_TOTAL_BUFFER_DFAULT = 256 * 1024 * 1024;<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span><a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>  /** Configuration key for ReplicationSource shipeEdits timeout */<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>  public static final String REPLICATION_SOURCE_SHIPEDITS_TIMEOUT =<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>      "replication.source.shipedits.timeout";<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>  public static final int REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT = 60000;<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span><a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>  /**<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>   * Directory where the source cluster file system client configuration are placed which is used by<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>   * sink cluster to copy HFiles from source cluster file system<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>   */<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>  public static final String REPLICATION_CONF_DIR = "hbase.replication.conf.dir";<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span><a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>  /** Maximum time to retry for a failed bulk load request */<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>  public static final String BULKLOAD_MAX_RETRIES_NUMBER = "hbase.bulkload.retries.number";<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span><a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>  public static final String KEY_FOR_HOSTNAME_SEEN_BY_MASTER =<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>    "hbase.regionserver.hostname.seen.by.master";<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span><a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>  public static final String HBASE_MASTER_LOGCLEANER_PLUGINS =<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>      "hbase.master.logcleaner.plugins";<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span><a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>  public static final String HBASE_REGION_SPLIT_POLICY_KEY =<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>    "hbase.regionserver.region.split.policy";<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span><a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>  /** Whether nonces are enabled; default is true. */<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>  public static final String HBASE_RS_NONCES_ENABLED = "hbase.regionserver.nonces.enabled";<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span><a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>  /**<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>   * Configuration key for the size of the block cache<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>   */<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>  public static final String HFILE_BLOCK_CACHE_SIZE_KEY =<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>    "hfile.block.cache.size";<a name="line.1033"></a>
 <span class="sourceLineNo">1034</span><a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>  /*<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    * Minimum percentage of free heap necessary for a successful cluster startup.<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    */<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>  public static final float HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD = 0.2f;<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  /**<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>   */<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>  @Deprecated<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>  public static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>      Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span><a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>  /**<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>   * &lt;pre&gt;<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>   * &lt;/pre&gt;<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>   */<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  @Deprecated<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>  public static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>      Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>  /**<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>   */<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>  @Deprecated<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>  /**<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>   */<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>  @Deprecated<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>  /**<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>   */<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>  @Deprecated<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>  public static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>  public static final String CP_HTD_ATTR_INCLUSION_KEY =<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>      "hbase.coprocessor.classloader.included.classes";<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span><a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>  /** The delay when re-trying a socket operation in a loop (HBASE-4712) */<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>  public static final int SOCKET_RETRY_WAIT_MS = 200;<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>  /** Host name of the local machine */<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>  public static final String LOCALHOST = "localhost";<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span><a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>  /**<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>   * If this parameter is set to true, then hbase will read<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>   * data and then verify checksums. Checksum verification<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>   * inside hdfs will be switched off.  However, if the hbase-checksum<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>   * verification fails, then it will switch back to using<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>   * hdfs checksums for verifiying data that is being read from storage.<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>   *<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>   * If this parameter is set to false, then hbase will not<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>   * verify any checksums, instead it will depend on checksum verification<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>   * being done in the hdfs client.<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>   */<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>  public static final String HBASE_CHECKSUM_VERIFICATION =<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>      "hbase.regionserver.checksum.verify";<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span><a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>  public static final String LOCALHOST_IP = "127.0.0.1";<a name="line.1099"></a>
+<span class="sourceLineNo">1035</span>  public static final float HFILE_BLOCK_CACHE_SIZE_DEFAULT = 0.4f;<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span><a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>  /*<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>    * Minimum percentage of free heap necessary for a successful cluster startup.<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>    */<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>  public static final float HBASE_CLUSTER_MINIMUM_MEMORY_THRESHOLD = 0.2f;<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span><a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>  /**<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>   */<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>  @Deprecated<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>  public static final Pattern CP_HTD_ATTR_KEY_PATTERN =<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>      Pattern.compile("^coprocessor\\$([0-9]+)$", Pattern.CASE_INSENSITIVE);<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span><a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>  /**<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>   * &lt;pre&gt;<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>   * Pattern that matches a coprocessor specification. Form is:<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>   * {@code &lt;coprocessor jar file location&gt; '|' &lt;class name&gt; ['|' &lt;priority&gt; ['|' &lt;arguments&gt;]]}<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>   * where arguments are {@code &lt;KEY&gt; '=' &lt;VALUE&gt; [,...]}<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>   * For example: {@code hdfs:///foo.jar|com.foo.FooRegionObserver|1001|arg1=1,arg2=2}<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>   * &lt;/pre&gt;<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>   */<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>  @Deprecated<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>  public static final Pattern CP_HTD_ATTR_VALUE_PATTERN =<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      Pattern.compile("(^[^\\|]*)\\|([^\\|]+)\\|[\\s]*([\\d]*)[\\s]*(\\|.*)?$");<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>  /**<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>   */<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>  @Deprecated<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN = "[^=,]+";<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>  /**<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>   */<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>  @Deprecated<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>  public static final String CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN = "[^,]+";<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>  /**<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>   * @deprecated  It is used internally. As of release 2.0.0, this will be removed in HBase 3.0.0.<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>   */<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>  @Deprecated<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>  public static final Pattern CP_HTD_ATTR_VALUE_PARAM_PATTERN = Pattern.compile(<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>      "(" + CP_HTD_ATTR_VALUE_PARAM_KEY_PATTERN + ")=(" +<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>      CP_HTD_ATTR_VALUE_PARAM_VALUE_PATTERN + "),?");<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>  public static final String CP_HTD_ATTR_INCLUSION_KEY =<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      "hbase.coprocessor.classloader.included.classes";<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span><a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>  /** The delay when re-trying a socket operation in a loop (HBASE-4712) */<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>  public static final int SOCKET_RETRY_WAIT_MS = 200;<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span><a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>  /** Host name of the local machine */<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>  public static final String LOCALHOST = "localhost";<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span><a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>  /**<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>   * If this parameter is set to true, then hbase will read<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>   * data and then verify checksums. Checksum verification<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>   * inside hdfs will be switched off.  However, if the hbase-checksum<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>   * verification fails, then it will switch back to using<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>   * hdfs checksums for verifiying data that is being read from storage.<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>   *<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>   * If this parameter is set to false, then hbase will not<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>   * verify any checksums, instead it will depend on checksum verification<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>   * being done in the hdfs client.<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>   */<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>  public static final String HBASE_CHECKSUM_VERIFICATION =<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      "hbase.regionserver.checksum.verify";<a name="line.1099"></a>
 <span class="sourceLineNo">1100</span><a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>  public static final String REGION_SERVER_HANDLER_COUNT = "hbase.regionserver.handler.count";<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>  public static final int DEFAULT_REGION_SERVER_HANDLER_COUNT = 30;<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span><a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>  /*<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>   * REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT:<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>   * -1  =&gt; Disable aborting<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>   * 0   =&gt; Abort if even a single handler has died<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>   * 0.x =&gt; Abort only when this percent of handlers have died<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>   * 1   =&gt; Abort only all of the handers have died<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>   */<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>  public static final String REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT =<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>      "hbase.regionserver.handler.abort.on.error.percent";<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  public static final double DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT = 0.5;<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span><a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>  //High priority handlers to deal with admin requests and system table operation requests<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>  public static final String REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT =<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>      "hbase.regionserver.metahandler.count";<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>  public static final int DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT = 20;<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span><a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>  public static final String REGION_SERVER_REPLICATION_HANDLER_COUNT =<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      "hbase.regionserver.replication.handler.count";<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>  public static final int DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT = 3;<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>  // Meta Transition handlers to deal with meta ReportRegionStateTransitionRequest. Meta transition<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>  // should be dealt with in a separate handler in case blocking other region's transition.<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>  public static final String MASTER_META_TRANSITION_HANDLER_COUNT =<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>      "hbase.master.meta.transition.handler.count";<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>  public static final int MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT = 1;<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span><a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>  /** Conf key for enabling meta replication */<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>  public static final String USE_META_REPLICAS = "hbase.meta.replicas.use";<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>  public static final boolean DEFAULT_USE_META_REPLICAS = false;<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>  public static final String META_REPLICAS_NUM = "hbase.meta.replica.count";<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>  public static final int DEFAULT_META_REPLICA_NUM = 1;<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span><a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>  /**<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>   * The name of the configuration parameter that specifies<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>   * the number of bytes in a newly created checksum chunk.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>   */<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>  public static final String BYTES_PER_CHECKSUM =<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>      "hbase.hstore.bytes.per.checksum";<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span><a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>  /**<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>   * The name of the configuration parameter that specifies<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>   * the name of an algorithm that is used to compute checksums<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>   * for newly created blocks.<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>   */<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>  public static final String CHECKSUM_TYPE_NAME =<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      "hbase.hstore.checksum.algorithm";<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span><a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>  /** Enable file permission modification from standard hbase */<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>  public static final String ENABLE_DATA_FILE_UMASK = "hbase.data.umask.enable";<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>  /** File permission umask to use when creating hbase data files */<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>  public static final String DATA_FILE_UMASK_KEY = "hbase.data.umask";<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span><a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>  /** Configuration name of WAL Compression */<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>  public static final String ENABLE_WAL_COMPRESSION =<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>    "hbase.regionserver.wal.enablecompression";<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>  /** Configuration name of WAL storage policy<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>   * Valid values are: HOT, COLD, WARM, ALL_SSD, ONE_SSD, LAZY_PERSIST<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>   * See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html*/<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>  public static final String WAL_STORAGE_POLICY = "hbase.wal.storage.policy";<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>  /**<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>   * "NONE" is not a valid storage policy and means we defer the policy to HDFS. @see<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>   * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20691"&gt;HBASE-20691&lt;/a&gt;<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>   */<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>  public static final String DEFER_TO_HDFS_STORAGE_POLICY = "NONE";<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>  /** By default we defer the WAL storage policy to HDFS */<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>  public static final String DEFAULT_WAL_STORAGE_POLICY = DEFER_TO_HDFS_STORAGE_POLICY;<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>  /** Region in Transition metrics threshold time */<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span><a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>  public static final String LOAD_BALANCER_SLOP_KEY = "hbase.regions.slop";<a name="line.1175"></a>
+<span class="sourceLineNo">1101</span>  public static final String LOCALHOST_IP = "127.0.0.1";<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span><a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>  public static final String REGION_SERVER_HANDLER_COUNT = "hbase.regionserver.handler.count";<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>  public static final int DEFAULT_REGION_SERVER_HANDLER_COUNT = 30;<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span><a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>  /*<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>   * REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT:<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>   * -1  =&gt; Disable aborting<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>   * 0   =&gt; Abort if even a single handler has died<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>   * 0.x =&gt; Abort only when this percent of handlers have died<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>   * 1   =&gt; Abort only all of the handers have died<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>   */<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>  public static final String REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT =<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      "hbase.regionserver.handler.abort.on.error.percent";<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>  public static final double DEFAULT_REGION_SERVER_HANDLER_ABORT_ON_ERROR_PERCENT = 0.5;<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span><a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>  //High priority handlers to deal with admin requests and system table operation requests<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>  public static final String REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT =<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      "hbase.regionserver.metahandler.count";<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>  public static final int DEFAULT_REGION_SERVER_HIGH_PRIORITY_HANDLER_COUNT = 20;<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span><a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>  public static final String REGION_SERVER_REPLICATION_HANDLER_COUNT =<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>      "hbase.regionserver.replication.handler.count";<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>  public static final int DEFAULT_REGION_SERVER_REPLICATION_HANDLER_COUNT = 3;<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>  // Meta Transition handlers to deal with meta ReportRegionStateTransitionRequest. Meta transition<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>  // should be dealt with in a separate handler in case blocking other region's transition.<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>  public static final String MASTER_META_TRANSITION_HANDLER_COUNT =<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>      "hbase.master.meta.transition.handler.count";<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>  public static final int MASTER__META_TRANSITION_HANDLER_COUNT_DEFAULT = 1;<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span><a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>  /** Conf key for enabling meta replication */<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>  public static final String USE_META_REPLICAS = "hbase.meta.replicas.use";<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>  public static final boolean DEFAULT_USE_META_REPLICAS = false;<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>  public static final String META_REPLICAS_NUM = "hbase.meta.replica.count";<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  public static final int DEFAULT_META_REPLICA_NUM = 1;<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  /**<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>   * The name of the configuration parameter that specifies<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>   * the number of bytes in a newly created checksum chunk.<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>   */<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>  public static final String BYTES_PER_CHECKSUM =<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>      "hbase.hstore.bytes.per.checksum";<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span><a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>  /**<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>   * The name of the configuration parameter that specifies<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>   * the name of an algorithm that is used to compute checksums<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>   * for newly created blocks.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>   */<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>  public static final String CHECKSUM_TYPE_NAME =<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>      "hbase.hstore.checksum.algorithm";<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span><a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>  /** Enable file permission modification from standard hbase */<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>  public static final String ENABLE_DATA_FILE_UMASK = "hbase.data.umask.enable";<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>  /** File permission umask to use when creating hbase data files */<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>  public static final String DATA_FILE_UMASK_KEY = "hbase.data.umask";<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span><a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>  /** Configuration name of WAL Compression */<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>  public static final String ENABLE_WAL_COMPRESSION =<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    "hbase.regionserver.wal.enablecompression";<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span><a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>  /** Configuration name of WAL storage policy<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>   * Valid values are: HOT, COLD, WARM, ALL_SSD, ONE_SSD, LAZY_PERSIST<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span>   * See http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/ArchivalStorage.html*/<a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>  public static final String WAL_STORAGE_POLICY = "hbase.wal.storage.policy";<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>  /**<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>   * "NONE" is not a valid storage policy and means we defer the policy to HDFS. @see<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>   * &lt;a href="https://issues.apache.org/jira/browse/HBASE-20691"&gt;HBASE-20691&lt;/a&gt;<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>   */<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>  public static final String DEFER_TO_HDFS_STORAGE_POLICY = "NONE";<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>  /** By default we defer the WAL storage policy to HDFS */<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>  public static final String DEFAULT_WAL_STORAGE_POLICY = DEFER_TO_HDFS_STORAGE_POLICY;<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span><a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>  /** Region in Transition metrics threshold time */<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>  public static final String METRICS_RIT_STUCK_WARNING_THRESHOLD =<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      "hbase.metrics.rit.stuck.warning.threshold";<a name="line.1175"></a>
 <span class="sourceLineNo">1176</span><a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>  /** delimiter used between portions of a region name */<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>  public static final int DELIMITER = ',';<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>  /**<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>   * QOS attributes: these attributes are used to demarcate RPC call processing<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>   * by different set of handlers. For example, HIGH_QOS tagged methods are<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>   * handled by high priority handlers.<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>   */<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>  // normal_QOS &lt; replication_QOS &lt; replay_QOS &lt; QOS_threshold &lt; admin_QOS &lt; high_QOS &lt; meta_QOS<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>  public static final int PRIORITY_UNSET = -1;<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  public static final int NORMAL_QOS = 0;<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>  public static final int REPLICATION_QOS = 5;<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  public static final int REPLAY_QOS = 6;<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>  public static final int QOS_THRESHOLD = 10;<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>  public static final int ADMIN_QOS = 100;<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>  public static final int HIGH_QOS = 200;<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>  public static final int SYSTEMTABLE_QOS = HIGH_QOS;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>  /**<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>   * @deprecated the name "META_QOS" is a bit ambiguous, actually only meta region transition can<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>   *             use this priority, and you should not use this directly. Will be removed in 3.0.0.<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>   */<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>  @Deprecated<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>  public static final int META_QOS = 300;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span><a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>  /** Directory under /hbase where archived hfiles are stored */<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>  public static final String HFILE_ARCHIVE_DIRECTORY = "archive";<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span><a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>  /**<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>   * Name of the directory to store all snapshots. See SnapshotDescriptionUtils for<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   * remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>   * uni-directional.<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  public static final String SNAPSHOT_DIR_NAME = ".hbase-snapshot";<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span><a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>  /* Name of old snapshot directory. See HBASE-8352 for details on why it needs to be renamed */<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>  public static final String OLD_SNAPSHOT_DIR_NAME = ".snapshot";<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span><a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  /** Temporary directory used for table creation and deletion */<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>  public static final String HBASE_TEMP_DIRECTORY = ".tmp";<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  /**<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * The period (in milliseconds) between computing region server point in time metrics<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   */<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>  public static final String REGIONSERVER_METRICS_PERIOD = "hbase.regionserver.metrics.period";<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>  public static final long DEFAULT_REGIONSERVER_METRICS_PERIOD = 5000;<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>  /** Directories that are not HBase table directories */<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>  public static final List&lt;String&gt; HBASE_NON_TABLE_DIRS =<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    Collections.unmodifiableList(Arrays.asList(new String[] {<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>      HBCK_SIDELINEDIR_NAME, HBASE_TEMP_DIRECTORY, MIGRATION_NAME<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    }));<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span><a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>  /**<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>   * Directories that are not HBase user table directories.<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>   * @deprecated Since hbase-2.3.0; no replacement as not used any more (internally at least)<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>   */<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>  @Deprecated<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>  public static final List&lt;String&gt; HBASE_NON_USER_TABLE_DIRS =<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>    Collections.unmodifiableList(Arrays.asList((String[])ArrayUtils.addAll(<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>      new String[] { TableName.META_TABLE_NAME.getNameAsString() },<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>      HBASE_NON_TABLE_DIRS.toArray())));<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span><a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>  /** Health script related settings. */<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>  public static final String HEALTH_SCRIPT_LOC = "hbase.node.health.script.location";<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>  public static final String HEALTH_SCRIPT_TIMEOUT = "hbase.node.health.script.timeout";<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>  public static final String HEALTH_CHORE_WAKE_FREQ =<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>      "hbase.node.health.script.frequency";<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>  public static final long DEFAULT_HEALTH_SCRIPT_TIMEOUT = 60000;<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  /**<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   * The maximum number of health check failures a server can encounter consecutively.<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>   */<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>  public static final String HEALTH_FAILURE_THRESHOLD =<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>      "hbase.node.health.failure.threshold";<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>  public static final int DEFAULT_HEALTH_FAILURE_THRESHOLD = 3;<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span><a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  public static final String EXECUTOR_STATUS_COLLECT_ENABLED =<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      "hbase.executors.status.collect.enabled";<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>  public static final boolean DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED = 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>   * Setting to activate, or not, the publication of the status by the master. Default<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   *  notification is by a multicast message.<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   */<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>  public static final String STATUS_PUBLISHED = "hbase.status.published";<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>  public static final boolean STATUS_PUBLISHED_DEFAULT = false;<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span><a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>  /**<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>   * IP to use for the multicast status messages between the master and the clients.<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>   * The default address is chosen as one among others within the ones suitable for multicast<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>   * messages.<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>   */<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>  public static final String STATUS_MULTICAST_ADDRESS = "hbase.status.multicast.address.ip";<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>  public static final String DEFAULT_STATUS_MULTICAST_ADDRESS = "226.1.1.3";<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span><a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>  /**<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   * The address to use for binding the local socket for receiving multicast. Defaults to<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>   * 0.0.0.0.<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-9961"&gt;HBASE-9961&lt;/a&gt;<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>   */<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>  public static final String STATUS_MULTICAST_BIND_ADDRESS =<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>      "hbase.status.multicast.bind.address.ip";<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>  public static final String DEFAULT_STATUS_MULTICAST_BIND_ADDRESS = "0.0.0.0";<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span><a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>  /**<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>   * The port to use for the multicast messages.<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>   */<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>  public static final String STATUS_MULTICAST_PORT = "hbase.status.multicast.address.port";<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>  public static final int DEFAULT_STATUS_MULTICAST_PORT = 16100;<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span><a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>  /**<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>   * The network interface name to use for the multicast messages.<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>   */<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>  public static final String STATUS_MULTICAST_NI_NAME = "hbase.status.multicast.ni.name";<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span><a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>  /**<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   * The address to use for binding the local socket for sending multicast. Defaults to 0.0.0.0.<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   */<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>  public static final String STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS =<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>    "hbase.status.multicast.publisher.bind.address.ip";<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  public static final String DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS = "0.0.0.0";<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span><a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>  public static final long NO_NONCE = 0;<a name="line.1296"></a>
+<span class="sourceLineNo">1177</span>  public static final String LOAD_BALANCER_SLOP_KEY = "hbase.regions.slop";<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span><a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>  /** delimiter used between portions of a region name */<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>  public static final int DELIMITER = ',';<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span><a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>  /**<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>   * QOS attributes: these attributes are used to demarcate RPC call processing<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>   * by different set of handlers. For example, HIGH_QOS tagged methods are<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>   * handled by high priority handlers.<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>   */<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>  // normal_QOS &lt; replication_QOS &lt; replay_QOS &lt; QOS_threshold &lt; admin_QOS &lt; high_QOS &lt; meta_QOS<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  public static final int PRIORITY_UNSET = -1;<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>  public static final int NORMAL_QOS = 0;<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  public static final int REPLICATION_QOS = 5;<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>  public static final int REPLAY_QOS = 6;<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  public static final int QOS_THRESHOLD = 10;<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>  public static final int ADMIN_QOS = 100;<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  public static final int HIGH_QOS = 200;<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>  public static final int SYSTEMTABLE_QOS = HIGH_QOS;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>  /**<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   * @deprecated the name "META_QOS" is a bit ambiguous, actually only meta region transition can<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>   *             use this priority, and you should not use this directly. Will be removed in 3.0.0.<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>   */<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>  @Deprecated<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>  public static final int META_QOS = 300;<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span><a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>  /** Directory under /hbase where archived hfiles are stored */<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  public static final String HFILE_ARCHIVE_DIRECTORY = "archive";<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  /**<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   * Name of the directory to store all snapshots. See SnapshotDescriptionUtils for<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   * remaining snapshot constants; this is here to keep HConstants dependencies at a minimum and<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>   * uni-directional.<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>   */<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>  public static final String SNAPSHOT_DIR_NAME = ".hbase-snapshot";<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span><a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>  /* Name of old snapshot directory. See HBASE-8352 for details on why it needs to be renamed */<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>  public static final String OLD_SNAPSHOT_DIR_NAME = ".snapshot";<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span><a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>  /** Temporary directory used for table creation and deletion */<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  public static final String HBASE_TEMP_DIRECTORY = ".tmp";<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  /**<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>   * The period (in milliseconds) between computing region server point in time metrics<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>   */<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>  public static final String REGIONSERVER_METRICS_PERIOD = "hbase.regionserver.metrics.period";<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span>  public static final long DEFAULT_REGIONSERVER_METRICS_PERIOD = 5000;<a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>  /** Directories that are not HBase table directories */<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  public static final List&lt;String&gt; HBASE_NON_TABLE_DIRS =<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    Collections.unmodifiableList(Arrays.asList(new String[] {<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      HBCK_SIDELINEDIR_NAME, HBASE_TEMP_DIRECTORY, MIGRATION_NAME<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>    }));<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  /**<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>   * Directories that are not HBase user table directories.<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>   * @deprecated Since hbase-2.3.0; no replacement as not used any more (internally at least)<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>   */<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>  @Deprecated<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>  public static final List&lt;String&gt; HBASE_NON_USER_TABLE_DIRS =<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>    Collections.unmodifiableList(Arrays.asList((String[])ArrayUtils.addAll(<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      new String[] { TableName.META_TABLE_NAME.getNameAsString() },<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      HBASE_NON_TABLE_DIRS.toArray())));<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span><a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>  /** Health script related settings. */<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>  public static final String HEALTH_SCRIPT_LOC = "hbase.node.health.script.location";<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>  public static final String HEALTH_SCRIPT_TIMEOUT = "hbase.node.health.script.timeout";<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>  public static final String HEALTH_CHORE_WAKE_FREQ =<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>      "hbase.node.health.script.frequency";<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  public static final long DEFAULT_HEALTH_SCRIPT_TIMEOUT = 60000;<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>   * The maximum number of health check failures a server can encounter consecutively.<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   */<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>  public static final String HEALTH_FAILURE_THRESHOLD =<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>      "hbase.node.health.failure.threshold";<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>  public static final int DEFAULT_HEALTH_FAILURE_THRESHOLD = 3;<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span><a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  public static final String EXECUTOR_STATUS_COLLECT_ENABLED =<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>      "hbase.executors.status.collect.enabled";<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>  public static final boolean DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED = true;<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span><a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>  /**<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   * Setting to activate, or not, the publication of the status by the master. Default<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   *  notification is by a multicast message.<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   */<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>  public static final String STATUS_PUBLISHED = "hbase.status.published";<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>  public static final boolean STATUS_PUBLISHED_DEFAULT = false;<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span><a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>  /**<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>   * IP to use for the multicast status messages between the master and the clients.<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>   * The default address is chosen as one among others within the ones suitable for multicast<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>   * messages.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>   */<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>  public static final String STATUS_MULTICAST_ADDRESS = "hbase.status.multicast.address.ip";<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>  public static final String DEFAULT_STATUS_MULTICAST_ADDRESS = "226.1.1.3";<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>   * The address to use for binding the local socket for receiving multicast. Defaults to<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>   * 0.0.0.0.<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   * @see &lt;a href="https://issues.apache.org/jira/browse/HBASE-9961"&gt;HBASE-9961&lt;/a&gt;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   */<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>  public static final String STATUS_MULTICAST_BIND_ADDRESS =<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>      "hbase.status.multicast.bind.address.ip";<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>  public static final String DEFAULT_STATUS_MULTICAST_BIND_ADDRESS = "0.0.0.0";<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span><a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>  /**<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>   * The port to use for the multicast messages.<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>   */<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  public static final String STATUS_MULTICAST_PORT = "hbase.status.multicast.address.port";<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>  public static final int DEFAULT_STATUS_MULTICAST_PORT = 16100;<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>   * The network interface name to use for the multicast messages.<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   */<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>  public static final String STATUS_MULTICAST_NI_NAME = "hbase.status.multicast.ni.name";<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span><a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>  /**<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * The address to use for binding the local socket for sending multicast. Defaults to 0.0.0.0.<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>  public static final String STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS =<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    "hbase.status.multicast.publisher.bind.address.ip";<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>  public static final String DEFAULT_STATUS_MULTICAST_PUBLISHER_BIND_ADDRESS = "0.0.0.0";<a name="line.1296"></a>
 <span class="sourceLineNo">1297</span><a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>  /** Default cipher for encryption */<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>  public static final String CIPHER_AES = "AES";<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span><a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>  /** Configuration key for the crypto algorithm provider, a class name */<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>  public static final String CRYPTO_CIPHERPROVIDER_CONF_KEY = "hbase.crypto.cipherprovider";<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span><a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>  /** Configuration key for the crypto key provider, a class name */<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  public static final String CRYPTO_KEYPROVIDER_CONF_KEY = "hbase.crypto.keyprovider";<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span><a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>  /** Configuration key for the crypto key provider parameters */<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>  public static final String CRYPTO_KEYPROVIDER_PARAMETERS_KEY =<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      "hbase.crypto.keyprovider.parameters";<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span><a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>  /** Configuration key for the name of the master key for the cluster, a string */<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>  public static final String CRYPTO_MASTERKEY_NAME_CONF_KEY = "hbase.crypto.master.key.name";<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span><a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>  /** Configuration key for the name of the alternate master key for the cluster, a string */<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>  public static final String CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY =<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    "hbase.crypto.master.alternate.key.name";<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span><a name="line.1317"></a>
-<span class="sourceLineNo">1318</span>  /** Configuration key for the algorithm to use when encrypting the WAL, a string */<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  public static final String CRYPTO_WAL_ALGORITHM_CONF_KEY = "hbase.crypto.wal.algorithm";<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  /** Configuration key for the name of the master WAL encryption key for the cluster, a string */<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>  public static final String CRYPTO_WAL_KEY_NAME_CONF_KEY = "hbase.crypto.wal.key.name";<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span><a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  /** Configuration key for the algorithm used for creating jks key, a string */<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>  public static final String CRYPTO_KEY_ALGORITHM_CONF_KEY = "hbase.crypto.key.algorithm";<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span><a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  /** Configuration key for the name of the alternate cipher algorithm for the cluster, a string */<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>  public static final String CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY =<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>      "hbase.crypto.alternate.key.algorithm";<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span><a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>  /** Configuration key for enabling WAL encryption, a boolean */<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  public static final String ENABLE_WAL_ENCRYPTION = "hbase.regionserver.wal.encryption";<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  /** Configuration key for setting RPC codec class name */<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>  public static final String RPC_CODEC_CONF_KEY = "hbase.client.rpc.codec";<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span><a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>  /** Configuration key for setting replication codec class name */<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>  public static final String REPLICATION_CODEC_CONF_KEY = "hbase.replication.rpc.codec";<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>  public static final String REPLICATION_SOURCE_MAXTHREADS_KEY =<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>      "hbase.replication.source.maxthreads";<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span><a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>  /**<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>   * Drop edits for tables that been deleted from the replication source and target<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>   * @deprecated moved it into HBaseInterClusterReplicationEndpoint<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>   */<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>  @Deprecated<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>  public static final String REPLICATION_DROP_ON_DELETED_TABLE_KEY =<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      "hbase.replication.drop.on.deleted.table";<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span><a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>  public static final int REPLICATION_SOURCE_MAXTHREADS_DEFAULT = 10;<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span><a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>  /** Configuration key for SplitLog manager timeout */<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>  public static final String HBASE_SPLITLOG_MANAGER_TIMEOUT = "hbase.splitlog.manager.timeout";<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span><a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>  /**<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>   * Configuration keys for Bucket cache<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>   */<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>  // TODO moving these bucket cache implementation specific configs to this level is violation of<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>  // encapsulation. But as these has to be referred from hbase-common and bucket cache<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>  // sits in hbase-server, there were no other go! Can we move the cache implementation to<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>  // hbase-common?<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>   * Current ioengine options in include: heap, offheap and file:PATH (where PATH is the path<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>   * to the file that will host the file-based cache.  See BucketCache#getIOEngineFromName() for<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>   * list of supported ioengine options.<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>   * &lt;p&gt;Set this option and a non-zero {@link #BUCKET_CACHE_SIZE_KEY} to enable bucket cache.<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>   */<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>  public static final String BUCKET_CACHE_IOENGINE_KEY = "hbase.bucketcache.ioengine";<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span><a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>  /**<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>   * When using bucket cache, this is a float that EITHER represents a percentage of total heap<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>   * memory size to give to the cache (if &amp;lt; 1.0) OR, it is the capacity in<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>   * megabytes of the cache.<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>   */<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>  public static final String BUCKET_CACHE_SIZE_KEY = "hbase.bucketcache.size";<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>   * HConstants for fast fail on the client side follow<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>  /**<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>   * Config for enabling/disabling the fast fail mode.<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>   */<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>  @Deprecated<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>  public static final String HBASE_CLIENT_FAST_FAIL_MODE_ENABLED =<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>    "hbase.client.fast.fail.mode.enabled";<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span><a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>  /**<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>   */<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>  @Deprecated<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>  public static final boolean HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT = false;<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span><a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>  /**<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>   */<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>  @Deprecated<a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>  public static final String HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS =<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>    "hbase.client.fastfail.threshold";<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span><a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>  /**<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>   */<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>  @Deprecated<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  public static final long HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT = 60000;<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span><a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>  /**<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>   */<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>  @Deprecated<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>  public static final String HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS =<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    "hbase.client.failure.map.cleanup.interval";<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span><a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>  /**<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>   */<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>  @Deprecated<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>  public static final long HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT = 600000;<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>   */<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>  @Deprecated<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>  public static final String HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS =<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>    "hbase.client.fast.fail.cleanup.duration";<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>   */<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>  @Deprecated<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>  public static final long HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT = 600000;<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span><a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>  /**<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>   */<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>  @Deprecated<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>  public static final String HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL =<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>    "hbase.client.fast.fail.interceptor.impl";<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span><a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>  /**<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0, replaced by procedure-based<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>   *   distributed WAL splitter; see SplitWALManager.<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>   */<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>  @Deprecated<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>  public static final String HBASE_SPLIT_WAL_COORDINATED_BY_ZK = "hbase.split.wal.zk.coordinated";<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span><a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>  /**<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0.<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>   */<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>  @Deprecated<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>  public static final boolean DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK = false;<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span><a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>  public static final String HBASE_SPLIT_WAL_MAX_SPLITTER = "hbase.regionserver.wal.max.splitters";<a name="line.1466"></a>
+<span class="sourceLineNo">1298</span>  public static final long NO_NONCE = 0;<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span><a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>  /** Default cipher for encryption */<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>  public static final String CIPHER_AES = "AES";<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span><a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>  /** Configuration key for the crypto algorithm provider, a class name */<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  public static final String CRYPTO_CIPHERPROVIDER_CONF_KEY = "hbase.crypto.cipherprovider";<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  /** Configuration key for the crypto key provider, a class name */<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>  public static final String CRYPTO_KEYPROVIDER_CONF_KEY = "hbase.crypto.keyprovider";<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span><a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>  /** Configuration key for the crypto key provider parameters */<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>  public static final String CRYPTO_KEYPROVIDER_PARAMETERS_KEY =<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>      "hbase.crypto.keyprovider.parameters";<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span><a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>  /** Configuration key for the name of the master key for the cluster, a string */<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>  public static final String CRYPTO_MASTERKEY_NAME_CONF_KEY = "hbase.crypto.master.key.name";<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span><a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>  /** Configuration key for the name of the alternate master key for the cluster, a string */<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>  public static final String CRYPTO_MASTERKEY_ALTERNATE_NAME_CONF_KEY =<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>    "hbase.crypto.master.alternate.key.name";<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  /** Configuration key for the algorithm to use when encrypting the WAL, a string */<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>  public static final String CRYPTO_WAL_ALGORITHM_CONF_KEY = "hbase.crypto.wal.algorithm";<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span><a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>  /** Configuration key for the name of the master WAL encryption key for the cluster, a string */<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>  public static final String CRYPTO_WAL_KEY_NAME_CONF_KEY = "hbase.crypto.wal.key.name";<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span><a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>  /** Configuration key for the algorithm used for creating jks key, a string */<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>  public static final String CRYPTO_KEY_ALGORITHM_CONF_KEY = "hbase.crypto.key.algorithm";<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span><a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>  /** Configuration key for the name of the alternate cipher algorithm for the cluster, a string */<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>  public static final String CRYPTO_ALTERNATE_KEY_ALGORITHM_CONF_KEY =<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>      "hbase.crypto.alternate.key.algorithm";<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span><a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  /** Configuration key for enabling WAL encryption, a boolean */<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>  public static final String ENABLE_WAL_ENCRYPTION = "hbase.regionserver.wal.encryption";<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span><a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>  /** Configuration key for setting RPC codec class name */<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>  public static final String RPC_CODEC_CONF_KEY = "hbase.client.rpc.codec";<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span><a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>  /** Configuration key for setting replication codec class name */<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>  public static final String REPLICATION_CODEC_CONF_KEY = "hbase.replication.rpc.codec";<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span><a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>  public static final String REPLICATION_SOURCE_MAXTHREADS_KEY =<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>      "hbase.replication.source.maxthreads";<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>   * Drop edits for tables that been deleted from the replication source and target<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   * @deprecated moved it into HBaseInterClusterReplicationEndpoint<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>   */<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>  @Deprecated<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>  public static final String REPLICATION_DROP_ON_DELETED_TABLE_KEY =<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>      "hbase.replication.drop.on.deleted.table";<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span><a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>  /** Maximum number of threads used by the replication source for shipping edits to the sinks */<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>  public static final int REPLICATION_SOURCE_MAXTHREADS_DEFAULT = 10;<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span><a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>  /** Configuration key for SplitLog manager timeout */<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>  public static final String HBASE_SPLITLOG_MANAGER_TIMEOUT = "hbase.splitlog.manager.timeout";<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span><a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>  /**<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>   * Configuration keys for Bucket cache<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>   */<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>  // TODO moving these bucket cache implementation specific configs to this level is violation of<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>  // encapsulation. But as these has to be referred from hbase-common and bucket cache<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>  // sits in hbase-server, there were no other go! Can we move the cache implementation to<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>  // hbase-common?<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>   * Current ioengine options in include: heap, offheap and file:PATH (where PATH is the path<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>   * to the file that will host the file-based cache.  See BucketCache#getIOEngineFromName() for<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>   * list of supported ioengine options.<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>   * &lt;p&gt;Set this option and a non-zero {@link #BUCKET_CACHE_SIZE_KEY} to enable bucket cache.<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>   */<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>  public static final String BUCKET_CACHE_IOENGINE_KEY = "hbase.bucketcache.ioengine";<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span><a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>  /**<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>   * When using bucket cache, this is a float that EITHER represents a percentage of total heap<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>   * memory size to give to the cache (if &amp;lt; 1.0) OR, it is the capacity in<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>   * megabytes of the cache.<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>   */<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>  public static final String BUCKET_CACHE_SIZE_KEY = "hbase.bucketcache.size";<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span><a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>  /**<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>   * HConstants for fast fail on the client side follow<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>   */<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>  /**<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>   * Config for enabling/disabling the fast fail mode.<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>   */<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>  @Deprecated<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>  public static final String HBASE_CLIENT_FAST_FAIL_MODE_ENABLED =<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    "hbase.client.fast.fail.mode.enabled";<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>  /**<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>   */<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>  @Deprecated<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>  public static final boolean HBASE_CLIENT_ENABLE_FAST_FAIL_MODE_DEFAULT = false;<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span><a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>  /**<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>   */<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>  @Deprecated<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>  public static final String HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS =<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>    "hbase.client.fastfail.threshold";<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>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>   */<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>  @Deprecated<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>  public static final long HBASE_CLIENT_FAST_FAIL_THREASHOLD_MS_DEFAULT = 60000;<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span><a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>  /**<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>   */<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>  @Deprecated<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span>  public static final String HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS =<a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    "hbase.client.failure.map.cleanup.interval";<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>  /**<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>   */<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>  @Deprecated<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>  public static final long HBASE_CLIENT_FAILURE_MAP_CLEANUP_INTERVAL_MS_DEFAULT = 600000;<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span><a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>  /**<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>   */<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>  @Deprecated<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>  public static final String HBASE_CLIENT_FAST_FAIL_CLEANUP_MS_DURATION_MS =<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>    "hbase.client.fast.fail.cleanup.duration";<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span><a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>  /**<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>   */<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>  @Deprecated<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>  public static final long HBASE_CLIENT_FAST_FAIL_CLEANUP_DURATION_MS_DEFAULT = 600000;<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span><a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>  /**<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>   * @deprecated since 2.3.0, and in 3.0.0 the actually implementation will be removed so config<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>   *             this value will have no effect. The constants itself will be removed in 4.0.0.<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>   */<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>  @Deprecated<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>  public static final String HBASE_CLIENT_FAST_FAIL_INTERCEPTOR_IMPL =<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>    "hbase.client.fast.fail.interceptor.impl";<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span><a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>  /**<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0, replaced by procedure-based<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>   *   distributed WAL splitter; see SplitWALManager.<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>   */<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>  @Deprecated<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>  public static final String HBASE_SPLIT_WAL_COORDINATED_BY_ZK = "hbase.split.wal.zk.coordinated";<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>   * @deprecated since 2.4.0 and in 3.0.0, to be removed in 4.0.0.<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>   */<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>  @Deprecated<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>  public static final boolean DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK = false;<a name="line.1466"></a>
 <span class="sourceLineNo">1467</span><a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>  public static final int DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER = 2;<a name="line.1468"></a>
+<span class="sourceLineNo">1468</span>  public static final String HBASE_SPLIT_WAL_MAX_SPLITTER = "hbase.regionserver.wal.max.splitters";<a name="line.1468"></a>
 <span class="sourceLineNo">1469</span><a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>  /** Config key for if the server should send backpressure and if the client should listen to<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>   * that backpressure from the server */<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>  public static final String ENABLE_CLIENT_BACKPRESSURE = "hbase.client.backpressure.enabled";<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>  public static final boolean DEFAULT_ENABLE_CLIENT_BACKPRESSURE = false;<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span><a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>  public static final String HEAP_OCCUPANCY_LOW_WATERMARK_KEY =<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      "hbase.heap.occupancy.low_water_mark";<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>  public static final float DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK = 0.95f;<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>  public static final String HEAP_OCCUPANCY_HIGH_WATERMARK_KEY =<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      "hbase.heap.occupancy.high_water_mark";<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  public static final float DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK = 0.98f;<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  /**<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>   * The max number of threads used for splitting storefiles in parallel during<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>   * the region split process.<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>   */<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>  public static final String REGION_SPLIT_THREADS_MAX =<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>    "hbase.regionserver.region.split.threads.max";<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span><a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>  /** Canary config keys */<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>  // TODO: Move these defines to Canary Class<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  public static final String HBASE_CANARY_WRITE_DATA_TTL_KEY = "hbase.canary.write.data.ttl";<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY =<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>      "hbase.canary.write.perserver.regions.lowerLimit";<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span><a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY =<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>      "hbase.canary.write.perserver.regions.upperLimit";<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span><a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>  public static final String HBASE_CANARY_WRITE_VALUE_SIZE_KEY = "hbase.canary.write.value.size";<a name="line.1499"></a>
+<span class="sourceLineNo">1470</span>  public static final int DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER = 2;<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span><a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>  /** Config key for if the server should send backpressure and if the client should listen to<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>   * that backpressure from the server */<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>  public static final String ENABLE_CLIENT_BACKPRESSURE = "hbase.client.backpressure.enabled";<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>  public static final boolean DEFAULT_ENABLE_CLIENT_BACKPRESSURE = false;<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span><a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>  public static final String HEAP_OCCUPANCY_LOW_WATERMARK_KEY =<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      "hbase.heap.occupancy.low_water_mark";<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>  public static final float DEFAULT_HEAP_OCCUPANCY_LOW_WATERMARK = 0.95f;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>  public static final String HEAP_OCCUPANCY_HIGH_WATERMARK_KEY =<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>      "hbase.heap.occupancy.high_water_mark";<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>  public static final float DEFAULT_HEAP_OCCUPANCY_HIGH_WATERMARK = 0.98f;<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span><a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>  /**<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>   * The max number of threads used for splitting storefiles in parallel during<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>   * the region split process.<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>   */<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>  public static final String REGION_SPLIT_THREADS_MAX =<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>    "hbase.regionserver.region.split.threads.max";<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span><a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>  /** Canary config keys */<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>  // TODO: Move these defines to Canary Class<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  public static final String HBASE_CANARY_WRITE_DATA_TTL_KEY = "hbase.canary.write.data.ttl";<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_LOWERLIMIT_KEY =<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>      "hbase.canary.write.perserver.regions.lowerLimit";<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span><a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>  public static final String HBASE_CANARY_WRITE_PERSERVER_REGIONS_UPPERLIMIT_KEY =<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>      "hbase.canary.write.perserver.regions.upperLimit";<a name="line.1499"></a>
 <span class="sourceLineNo">1500</span><a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>  public static final String HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY =<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>      "hbase.canary.write.table.check.period";<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span><a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>  public static final String HBASE_CANARY_READ_RAW_SCAN_KEY = "hbase.canary.read.raw.enabled";<a name="line.1504"></a>
+<span class="sourceLineNo">1501</span>  public static final String HBASE_CANARY_WRITE_VALUE_SIZE_KEY = "hbase.canary.write.value.size";<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span><a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>  public static final String HBASE_CANARY_WRITE_TABLE_CHECK_PERIOD_KEY =<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>      "hbase.canary.write.table.check.period";<a name="line.1504"></a>
 <span class="sourceLineNo">1505</span><a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>  public static final String HBASE_CANARY_READ_ALL_CF = "hbase.canary.read.all.column.famliy";<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  /**<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span>   * Configuration keys for programmatic JAAS configuration for secured ZK interaction<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>   */<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>  public static final String ZK_CLIENT_KEYTAB_FILE = "hbase.zookeeper.client.keytab.file";<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>  public static final String ZK_CLIENT_KERBEROS_PRINCIPAL =<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>      "hbase.zookeeper.client.kerberos.principal";<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>  public static final String ZK_SERVER_KEYTAB_FILE = "hbase.zookeeper.server.keytab.file";<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>  public static final String ZK_SERVER_KERBEROS_PRINCIPAL =<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>      "hbase.zookeeper.server.kerberos.principal";<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span><a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>  /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>   */<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span><a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span><a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span><a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span><a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>  // Default TTL - FOREVER<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>  public static final long DEFAULT_SNAPSHOT_TTL = 0;<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span><a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>  // User defined Default TTL config key<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>  public static final String DEFAULT_SNAPSHOT_TTL_CONFIG_KEY = "hbase.master.snapshot.ttl";<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span><a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>  // Regions Recovery based on high storeFileRefCount threshold value<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>  public static final String STORE_FILE_REF_COUNT_THRESHOLD =<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>    "hbase.regions.recovery.store.file.ref.count";<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span><a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>  // default -1 indicates there is no threshold on high storeRefCount<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>  public static final int DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD = -1;<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span><a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>  public static final String REGIONS_RECOVERY_INTERVAL =<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>    "hbase.master.regions.recovery.check.interval";<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>  public static final int DEFAULT_REGIONS_RECOVERY_INTERVAL = 1200 * 1000; // Default 20 min<a name="line.1557"></a>
+<span class="sourceLineNo">1506</span>  public static final String HBASE_CANARY_READ_RAW_SCAN_KEY = "hbase.canary.read.raw.enabled";<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span><a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>  public static final String HBASE_CANARY_READ_ALL_CF = "hbase.canary.read.all.column.famliy";<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>   * Configuration keys for programmatic JAAS configuration for secured ZK interaction<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>   */<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>  public static final String ZK_CLIENT_KEYTAB_FILE = "hbase.zookeeper.client.keytab.file";<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>  public static final String ZK_CLIENT_KERBEROS_PRINCIPAL =<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      "hbase.zookeeper.client.kerberos.principal";<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>  public static final String ZK_SERVER_KEYTAB_FILE = "hbase.zookeeper.server.keytab.file";<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>  public static final String ZK_SERVER_KERBEROS_PRINCIPAL =<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>      "hbase.zookeeper.server.kerberos.principal";<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span><a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>  /** Config key for hbase temporary directory in hdfs */<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  public static final String TEMPORARY_FS_DIRECTORY_KEY = "hbase.fs.tmp.dir";<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>   * Don't use it! This'll get you the wrong path in a secure cluster.<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   * Use FileSystem.getHomeDirectory() or<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   * "/user/" + UserGroupInformation.getCurrentUser().getShortUserName()<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>   */<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  public static final String DEFAULT_TEMPORARY_HDFS_DIRECTORY = "/user/"<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>      + System.getProperty("user.name") + "/hbase-staging";<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span><a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>  public static final String SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT =<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>      "hbase.snapshot.restore.take.failsafe.snapshot";<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>  public static final boolean DEFAULT_SNAPSHOT_RESTORE_TAKE_FAILSAFE_SNAPSHOT = true;<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span><a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>  public static final String SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      "hbase.snapshot.restore.failsafe.name";<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  public static final String DEFAULT_SNAPSHOT_RESTORE_FAILSAFE_NAME =<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      "hbase-failsafe-{snapshot.name}-{restore.timestamp}";<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span><a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>  public static final String DEFAULT_LOSSY_COUNTING_ERROR_RATE =<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      "hbase.util.default.lossycounting.errorrate";<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>  public static final String NOT_IMPLEMENTED = "Not implemented";<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span><a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>  // Default TTL - FOREVER<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>  public static final long DEFAULT_SNAPSHOT_TTL = 0;<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span><a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>  // User defined Default TTL config key<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>  public static final String DEFAULT_SNAPSHOT_TTL_CONFIG_KEY = "hbase.master.snapshot.ttl";<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span><a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>  // Regions Recovery based on high storeFileRefCount threshold value<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>  public static final String STORE_FILE_REF_COUNT_THRESHOLD =<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>    "hbase.regions.recovery.store.file.ref.count";<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span><a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>  // default -1 indicates there is no threshold on high storeRefCount<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>  public static final int DEFAULT_STORE_FILE_REF_COUNT_THRESHOLD = -1;<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span><a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>  public static final String REGIONS_RECOVERY_INTERVAL =<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>    "hbase.master.regions.recovery.check.interval";<a name="line.1557"></a>
 <span class="sourceLineNo">1558</span><a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>  /**<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>   * Configurations for master executor services.<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>   */<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>  public static final String MASTER_OPEN_REGION_THREADS =<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      "hbase.master.executor.openregion.threads";<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>  public static final int MASTER_OPEN_REGION_THREADS_DEFAULT = 5;<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span><a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>  public static final String MASTER_CLOSE_REGION_THREADS =<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>      "hbase.master.executor.closeregion.threads";<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>  public static final int MASTER_CLOSE_REGION_THREADS_DEFAULT = 5;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>  public static final String MASTER_SERVER_OPERATIONS_THREADS =<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      "hbase.master.executor.serverops.threads";<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  public static final int MASTER_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span><a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>  public static final String MASTER_META_SERVER_OPERATIONS_THREADS =<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      "hbase.master.executor.meta.serverops.threads";<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  public static final int MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span><a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  public static final String MASTER_LOG_REPLAY_OPS_THREADS =<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      "hbase.master.executor.logreplayops.threads";<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  public static final int MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT = 10;<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span><a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>  public static final int DEFAULT_SLOW_LOG_RING_BUFFER_SIZE = 256;<a name="line.1582"></a>
+<span class="sourceLineNo">1559</span>  public static final int DEFAULT_REGIONS_RECOVERY_INTERVAL = 1200 * 1000; // Default 20 min<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span><a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>  /**<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>   * Configurations for master executor services.<a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>   */<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>  public static final String MASTER_OPEN_REGION_THREADS =<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>      "hbase.master.executor.openregion.threads";<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  public static final int MASTER_OPEN_REGION_THREADS_DEFAULT = 5;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span><a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>  public static final String MASTER_CLOSE_REGION_THREADS =<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>      "hbase.master.executor.closeregion.threads";<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>  public static final int MASTER_CLOSE_REGION_THREADS_DEFAULT = 5;<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>  public static final String MASTER_SERVER_OPERATIONS_THREADS =<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>      "hbase.master.executor.serverops.threads";<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>  public static final int MASTER_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span><a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>  public static final String MASTER_META_SERVER_OPERATIONS_THREADS =<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      "hbase.master.executor.meta.serverops.threads";<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>  public static final int MASTER_META_SERVER_OPERATIONS_THREADS_DEFAULT = 5;<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>  public static final String MASTER_LOG_REPLAY_OPS_THREADS =<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      "hbase.master.executor.logreplayops.threads";<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>  public static final int MASTER_LOG_REPLAY_OPS_THREADS_DEFAULT = 10;<a name="line.1582"></a>
 <span class="sourceLineNo">1583</span><a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>  public static final String SLOW_LOG_BUFFER_ENABLED_KEY =<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    "hbase.regionserver.slowlog.buffer.enabled";<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>  public static final boolean DEFAULT_ONLINE_LOG_PROVIDER_ENABLED = false;<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span><a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>  /** The slowlog info family as a string*/<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>  private static final String SLOWLOG_INFO_FAMILY_STR = "info";<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>  /** The slowlog info family */<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>  public static final byte [] SLOWLOG_INFO_FAMILY = Bytes.toBytes(SLOWLOG_INFO_FAMILY_STR);<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span><a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>  public static final String SLOW_LOG_SYS_TABLE_ENABLED_KEY =<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>    "hbase.regionserver.slowlog.systable.enabled";<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>  public static final boolean DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY = false;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span><a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>  /**<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>   */<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>  public static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span><a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>  /**<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>   * Default value of {@link #BATCH_ROWS_THRESHOLD_NAME}<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>   */<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>  public static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span><a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>  private HConstants() {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>    // Can't be instantiated with this ctor.<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">1584</span>  public static final int DEFAULT_SLOW_LOG_RING_BUFFER_SIZE = 256;<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span><a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>  public static final String SLOW_LOG_BUFFER_ENABLED_KEY =<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>    "hbase.regionserver.slowlog.buffer.enabled";<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>  public static final boolean DEFAULT_ONLINE_LOG_PROVIDER_ENABLED = false;<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span><a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>  /** The slowlog info family as a string*/<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>  private static final String SLOWLOG_INFO_FAMILY_STR = "info";<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span><a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>  /** The slowlog info family */<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>  public static final byte [] SLOWLOG_INFO_FAMILY = Bytes.toBytes(SLOWLOG_INFO_FAMILY_STR);<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span><a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>  public static final String SLOW_LOG_SYS_TABLE_ENABLED_KEY =<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>    "hbase.regionserver.slowlog.systable.enabled";<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>  public static final boolean DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY = false;<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span><a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>  /**<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>   * Number of rows in a batch operation above which a warning will be logged.<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>   */<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>  public static final String BATCH_ROWS_THRESHOLD_NAME = "hbase.rpc.rows.warning.threshold";<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>   * Default value of {@link #BATCH_ROWS_THRESHOLD_NAME}<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>   */<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>  public static final int BATCH_ROWS_THRESHOLD_DEFAULT = 5000;<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span><a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>  private HConstants() {<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    // Can't be instantiated with this ctor.<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>  }<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>}<a name="line.1613"></a>
 
 
 
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 b694c3c..7f9cc0d 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
@@ -309,3594 +309,3609 @@
 <span class="sourceLineNo">301</span>  // Replication services. If no replication, this handler will be null.<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  // Compactions<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * encoded region name.  All access should be synchronized.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<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>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and here we really mean DataNode locations.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private LeaseManager leaseManager;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Instance of the hbase executor executorService.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected ExecutorService executorService;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private volatile boolean dataFsOk;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private HFileSystem dataFs;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private HFileSystem walFs;<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // Set when a report to the master comes back with a message asking us to<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  // of HRegionServer in isolation.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private volatile boolean stopped = false;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // debugging and unit tests.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private AtomicBoolean abortRequested;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // Default abort timeout is 1200 seconds for safe<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  // Will run this task when abort timeout<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // space regions.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private boolean stopping = false;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  private volatile boolean killed = false;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private volatile boolean shutDown = false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  protected final Configuration conf;<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private Path dataRootDir;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private Path walRootDir;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private final int threadWakeFrequency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  final int msgInterval;<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  private final int compactionCheckFrequency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int flushCheckFrequency;<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  // Stub to do region server status calls against the master.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private RpcClient rpcClient;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  // into web context.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  protected InfoServer infoServer;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private JvmPauseMonitor pauseMonitor;<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>  /** region server process name */<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public static final String REGIONSERVER = "regionserver";<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">304</span>  private boolean sameReplicationSourceAndSink;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // Compactions<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * encoded region name.  All access should be synchronized.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * and here we really mean DataNode locations.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private LeaseManager leaseManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  // Instance of the hbase executor executorService.<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  protected ExecutorService executorService;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private volatile boolean dataFsOk;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private HFileSystem dataFs;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private HFileSystem walFs;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  // Set when a report to the master comes back with a message asking us to<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  // of HRegionServer in isolation.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  private volatile boolean stopped = false;<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  // debugging and unit tests.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  private AtomicBoolean abortRequested;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  // Default abort timeout is 1200 seconds for safe<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  // Will run this task when abort timeout<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  // space regions.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  private boolean stopping = false;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  private volatile boolean killed = false;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean shutDown = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  protected final Configuration conf;<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  private Path dataRootDir;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private Path walRootDir;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private final int threadWakeFrequency;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  final int msgInterval;<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private final int compactionCheckFrequency;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private final int flushCheckFrequency;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  // Stub to do region server status calls against the master.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RpcClient rpcClient;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  // into web context.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  protected InfoServer infoServer;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private JvmPauseMonitor pauseMonitor;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  /** region server process name */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public static final String REGIONSERVER = "regionserver";<a name="line.388"></a>
 <span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private MetricsRegionServer metricsRegionServer;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private ScheduledChore periodicFlusher;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  private volatile WALFactory walFactory;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>  private LogRoller walRoller;<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  // A thread which calls reportProcedureDone<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // flag set after we're done setting up server threads<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // zookeeper connection and watcher<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  protected final ZKWatcher zooKeeper;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  // master address tracker<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  // Cluster Status Tracker<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // Log Splitting Worker<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private SplitLogWorker splitLogWorker;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  // A sleeper that sleeps for msgInterval.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected final Sleeper sleeper;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private final int shortOperationTimeout;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Block cache<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  private BlockCache blockCache;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  // The cache for mob files<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private MobFileCache mobFileCache;<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  /** The health check chore. */<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  private HealthCheckChore healthCheckChore;<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>  /** The Executor status collect chore. */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private ExecutorStatusChore executorStatusChore;<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  /** The nonce manager chore. */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  private ScheduledChore nonceManagerChore;<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * against Master.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  protected String useThisHostnameInstead;<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Exception will be thrown if both are used.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  protected String clusterId;<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  // chore for refreshing store files for secondary regions<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private StorefileRefresherChore storefileRefresher;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  private RegionServerCoprocessorHost rsHost;<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * HBASE-3787) are:<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>  final ServerNonceManager nonceManager;<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>  private UserProvider userProvider;<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  protected final RSRpcServices rpcServices;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  private CoordinatedStateManager csm;<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  /**<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   */<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  protected final ConfigurationManager configurationManager;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  @VisibleForTesting<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  private volatile ThroughputController flushThroughputController;<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Provide online slow log responses from ringbuffer<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  private NamedQueueRecorder namedQueueRecorder = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   */<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  private final boolean masterless;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  /**regionserver codec list **/<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  // A timer to shutdown the process if abort takes too long<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * &lt;p/&gt;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * Don't start any services or managers in here in the Constructor.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   */<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    super("RegionServer");  // thread name<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    TraceUtil.initTracer(conf);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    try {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      this.startcode = System.currentTimeMillis();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      this.conf = conf;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      this.dataFsOk = true;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      HFile.checkHFileVersion(this.conf);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      checkCodecs(this.conf);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>      // Disable usage of meta replicas in the regionserver<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      // Config'ed params<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.594"></a>
-<span class="sourceLineNo">595</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      this.stopped = false;<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>      initNamedQueueRecorder(conf);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      rpcServices = createRpcServices();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      String hostName =<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.604"></a>
-<span class="sourceLineNo">605</span>              : this.useThisHostnameInstead;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>      // login the zookeeper client principal (if using security)<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      // login the server principal (if using secure Hadoop)<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      login(userProvider, hostName);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // init superusers and add the server principal (if using security)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // or process owner as default super user.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Superusers.initialize(conf);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      boolean isMasterNotCarryTable =<a name="line.618"></a>
-<span class="sourceLineNo">619</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (!isMasterNotCarryTable) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        mobFileCache = new MobFileCache(conf);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>      uncaughtExceptionHandler =<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      initializeFileSystem();<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>      this.configurationManager = new ConfigurationManager();<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      // Open connection to zookeeper and set primary watcher<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        canCreateBaseZNode());<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      if (!this.masterless) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          this.csm = new ZkCoordinatedStateManager(this);<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>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        masterAddressTracker.start();<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        clusterStatusTracker.start();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      } else {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        masterAddressTracker = null;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        clusterStatusTracker = null;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.rpcServices.start(zooKeeper);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      // class HRS. TODO.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      this.choreService = new ChoreService(getName(), true);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      this.executorService = new ExecutorService(getName());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      putUpWebUI();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    } catch (Throwable t) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // cause of failed startup is lost.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.error("Failed construction RegionServer", t);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      throw t;<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>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    if (!(this instanceof HMaster)) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      if (isOnlineLogProviderEnabled) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    } else {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final boolean isBalancerDecisionRecording = conf<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      if (isBalancerDecisionRecording) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>  }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>  // HMaster should override this method to load the specific config for master<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        throw new IOException(msg);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      } else {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        return rpcServices.isa.getHostName();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    } else {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      return hostname;<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">709</span>   * If running on Windows, do windows-specific setup.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   */<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        conf.reloadConfiguration();<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        cm.notifyAllObservers(conf);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      });<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    NettyEventLoopGroupConfig nelgc =<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    return nelgc;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>  private void initializeFileSystem() throws IOException {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    // (unless all is set to defaults).<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<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>  protected void login(UserProvider user, String host) throws IOException {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Wait for an active Master.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * See override in Master superclass for how it is used.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  protected void waitForMasterActive() {}<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected String getProcessName() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return REGIONSERVER;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  protected boolean canCreateBaseZNode() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return this.masterless;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  protected boolean canUpdateTableDescriptor() {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    return false;<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  }<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    return new RSRpcServices(this);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span>  protected void configureInfoServer() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    return RSDumpServlet.class;<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  }<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>  @Override<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean registerService(Service instance) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    // No stacking of instances is allowed for a single executorService name<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        " already registered, rejecting request from " + instance);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      return false;<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>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    if (LOG.isDebugEnabled()) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      LOG.debug(<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    return true;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>  }<a name="line.803"></a>
-<span class="sourceLineNo">804</span><a name="line.804"></a>
-<span class="sourceLineNo">805</span>  private Configuration cleanupConfiguration() {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    Configuration conf = this.conf;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    //   masters' availability.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    //   other internal connections too.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.817"></a>
-<span class="sourceLineNo">818</span>      // the conf and unset the client ZK related properties<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      conf = new Configuration(this.conf);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return conf;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   */<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    // check to see if the codec list is available:<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    if (codecs == null) return;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (String codec : codecs) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        throw new IOException("Compression codec " + codec +<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          " not supported, aborting RS construction");<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      }<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    }<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  }<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>  public String getClusterId() {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    return this.clusterId;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>  /**<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * Setup our cluster connection if not already initialized.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   */<a name="line.846"></a>
-<span class="sourceLineNo">847</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (asyncClusterConnection == null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      Configuration conf = cleanupConfiguration();<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      User user = userProvider.getCurrent();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      asyncClusterConnection =<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  /**<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  private void preRegistrationInitialization() {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    try {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      initializeZooKeeper();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>      setupClusterConnection();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      // Setup RPC client for master communication<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    } catch (Throwable t) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      // Call stop if error or process will stick around for ever since server<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      // puts up non-daemon threads.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      this.rpcServices.stop();<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  /**<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Finally open long-living server short-circuit connection.<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   */<a name="line.881"></a>
-<span class="sourceLineNo">882</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    justification="cluster Id znode read would give us correct response")<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Nothing to do in here if no Master in the mix.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (this.masterless) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      return;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    // block until a master is available.  No point in starting up if no master<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    // running.<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    // when ready.<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    if (clusterId == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      // Retrieve clusterId<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      // Since cluster status is now up<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      // ID should have already been set by HMaster<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      try {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        if (clusterId == null) {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          this.abort("Cluster ID has not been set");<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>        LOG.info("ClusterId : " + clusterId);<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      } catch (KeeperException e) {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      }<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    }<a name="line.913"></a>
-<span class="sourceLineNo">914</span><a name="line.914"></a>
-<span class="sourceLineNo">915</span>    waitForMasterActive();<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    if (isStopped() || isAborted()) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      return; // No need for further initialization<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    }<a name="line.918"></a>
-<span class="sourceLineNo">919</span><a name="line.919"></a>
-<span class="sourceLineNo">920</span>    // watch for snapshots and other procedures<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    try {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      rspmHost.loadProcedures(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      rspmHost.initialize(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    } catch (KeeperException e) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.929"></a>
-<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.931"></a>
-<span class="sourceLineNo">932</span>   * if the region server is shut down<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   * @param tracker znode tracker to use<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   */<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.937"></a>
-<span class="sourceLineNo">938</span>      throws IOException, InterruptedException {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      if (this.stopped) {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      }<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  /**<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * @return True if the cluster is up.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>   */<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @Override<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  public boolean isClusterUp() {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    return this.masterless ||<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.952"></a>
-<span class="sourceLineNo">953</span>  }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>  /**<a name="line.955"></a>
-<span class="sourceLineNo">956</span>   * The HRegionServer sticks in this loop until closed.<a name="line.956"></a>
-<span class="sourceLineNo">957</span>   */<a name="line.957"></a>
-<span class="sourceLineNo">958</span>  @Override<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  public void run() {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (isStopped()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.info("Skipping run; stopped");<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>      preRegistrationInitialization();<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    } catch (Throwable e) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      abort("Fatal exception during initialization", e);<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    }<a name="line.969"></a>
-<span class="sourceLineNo">970</span><a name="line.970"></a>
-<span class="sourceLineNo">971</span>    try {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        // come up.<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        LOG.debug("About to register with Master.");<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        RetryCounterFactory rcf =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        RetryCounter rc = rcf.create();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        while (keepLooping()) {<a name="line.986"></a>
-<span class="sourceLineNo">987</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>          if (w == null) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.989"></a>
-<span class="sourceLineNo">990</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            this.sleeper.sleep(sleepTime);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>          } else {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>            handleReportForDutyResponse(w);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>            break;<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          }<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      }<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>        // start the snapshot handler and other procedure handlers,<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        // since the server is ready to run<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>        if (this.rspmHost != null) {<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          this.rspmHost.start();<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>        }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        // Start the Quota Manager<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>        if (this.rsQuotaManager != null) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          this.rsSpaceQuotaManager.start();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span><a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // We registered with the Master.  Go into run mode.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      long lastMsg = System.currentTimeMillis();<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      long oldRequestCount = -1;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // The main run loop.<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        if (!isClusterUp()) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>          if (onlineRegions.isEmpty()) {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>          } else if (!this.stopping) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>            this.stopping = true;<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>            LOG.info("Closing user regions");<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>            closeUserRegions(this.abortRequested.get());<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>          } else {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            if (allUserRegionsOffline) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              // Set stopped if no more write requests tp meta tables<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>              // since last time we went around the loop.  Any open<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>              // meta regions will be closed on our way out.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>                break;<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>              }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>              oldRequestCount = getWriteRequestCount();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>            } else {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>              // Make sure all regions have been closed -- some regions may<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>              // have not got it because we were splitting at the time of<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>              // the call to closeUserRegions.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>              closeUserRegions(this.abortRequested.get());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>        long now = System.currentTimeMillis();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          tryRegionServerReport(lastMsg, now);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          lastMsg = System.currentTimeMillis();<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>        }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>          this.sleeper.sleep();<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>        }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      } // for<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    } catch (Throwable t) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>        abort(prefix + t.getMessage(), t);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    if (this.leaseManager != null) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    if (this.splitLogWorker != null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>      splitLogWorker.stop();<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    if (this.infoServer != null) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.info("Stopping infoServer");<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      try {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>        this.infoServer.stop();<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      } catch (Exception e) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    }<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // Send cache a shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    if (blockCache != null) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      blockCache.shutdown();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (mobFileCache != null) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      mobFileCache.shutdown();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span><a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span><a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (rspmHost != null) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (this.killed) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    } else if (abortRequested.get()) {<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      if (this.dataFsOk) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      LOG.info("aborting server " + this.serverName);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    } else {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      closeUserRegions(abortRequested.get());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      LOG.info("stopping server " + this.serverName);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    if (this.asyncClusterConnection != null) {<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>      try {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>        this.asyncClusterConnection.close();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      } catch (IOException e) {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      }<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    }<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        if (this.compactSplitThread != null) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>          this.compactSplitThread.join();<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          this.compactSplitThread = null;<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    }<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    // Stop the quota manager<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    if (rsQuotaManager != null) {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsQuotaManager.stop();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    if (rsSpaceQuotaManager != null) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      rsSpaceQuotaManager.stop();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager = null;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    // flag may be changed when closing regions throws exception.<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    if (this.dataFsOk) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      shutdownWAL(!abortRequested.get());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    // Make sure the proxy is down.<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    if (this.rssStub != null) {<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      this.rssStub = null;<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    if (this.lockStub != null) {<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.lockStub = null;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>    if (this.rpcClient != null) {<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      this.rpcClient.close();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    }<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    if (this.leaseManager != null) {<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      this.leaseManager.close();<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    }<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (this.pauseMonitor != null) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.pauseMonitor.stop();<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    if (!killed) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      stopServiceThreads();<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    if (this.rpcServices != null) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      this.rpcServices.stop();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      deleteMyEphemeralNode();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      // pass<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    } catch (KeeperException e) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span><a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    if (this.zooKeeper != null) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      this.zooKeeper.close();<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.shutDown = true;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  private boolean containsMetaTableRegions() {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>  }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span><a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>  private boolean areAllUserRegionsOffline() {<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    boolean allUserRegionsOffline = true;<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        allUserRegionsOffline = false;<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        break;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      }<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    return allUserRegionsOffline;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span><a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>  /**<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   * @return Current write count for all online regions.<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>   */<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  private long getWriteRequestCount() {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    long writeCount = 0;<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    }<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    return writeCount;<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span><a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  @VisibleForTesting<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      throws IOException {<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>      return;<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      request.setLoad(sl);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      rss.regionServerReport(null, request.build());<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    } catch (ServiceException se) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // This will be caught and handled as a fatal error in run()<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        throw ioe;<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>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      // Method blocks until new master is found or we are stopped<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>      createRegionServerStatusStub(true);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    }<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  }<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span><a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   *<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * @param regionSizeStore The store containing region sizes<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>   */<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    if (rss == null) {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      // the current server could be stopping.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      return true;<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    try {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    } catch (ServiceException se) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>            + " This will be retried.", ioe);<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        return true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      if (rssStub == rss) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        rssStub = null;<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      createRegionServerStatusStub(true);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>            return false;<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return true;<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param rss The stub to send to the Master<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param regionSizeStore The store containing region sizes<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    RegionSpaceUseReportRequest request =<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    // Record the number of size reports sent<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    if (metricsRegionServer != null) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>  }<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span><a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  /**<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>   *<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * @param regionSizes The size in bytes of regions<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * @return The corresponding protocol buffer message.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   */<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    return request.build();<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span><a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  /**<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * protobuf message.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   *<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * @param regionInfo The RegionInfo<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>   * @return The protocol buffer<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   */<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    return RegionSpaceUse.newBuilder()<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        .build();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      throws IOException {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    // the wrapper to compute those numbers in one place.<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    // history.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    long usedMemory = -1L;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    long maxMemory = -1L;<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    if (usage != null) {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>      usedMemory = usage.getUsed();<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      maxMemory = usage.getMax();<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>    for (String coprocessor : coprocessors) {<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    for (HRegion region : regions) {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      if (region.getCoprocessorHost() != null) {<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>          .getCoprocessors()) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      }<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    if (this.infoServer != null) {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    } else {<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      serverLoad.setInfoServerPort(-1);<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>    }<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    MetricsUserAggregateSource userSource =<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    if (userSource != null) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      }<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    }<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    // either source or sink will get the same info<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    if (rsources != null) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      // always refresh first to get the latest value<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      if (rLoad != null) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS :<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            rLoad.getReplicationLoadSourceEntries()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>          serverLoad.addReplLoadSource(rLS);<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>    }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span><a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    return serverLoad.build();<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>  }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span><a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>    StringBuilder sb = new StringBuilder();<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>    }<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    return sb.toString();<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>  }<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span><a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>  /**<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>   * Wait on regions close.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   */<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    // Wait till all regions are closed before going out.<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    int lastCount = -1;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    long previousLogTime = 0;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>    boolean interrupted = false;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    try {<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      while (!onlineRegions.isEmpty()) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>        int count = getNumberOfOnlineRegions();<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        // Only print a message if the count of regions has changed.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>        if (count != lastCount) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>          // Log every second at most<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>            previousLogTime = System.currentTimeMillis();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>            lastCount = count;<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>            // Only print out regions still closing if a small number else will<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>            // swamp the log.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>            }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>          }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        // protect against the case where an open comes in after we start the<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        // iterator of onlineRegions to close all user regions.<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>            closedRegions.add(hri.getEncodedName());<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>            // Don't update zk with this close transition; pass false.<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>          }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        // No regions in RIT, we could stop waiting now.<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>          if (!onlineRegions.isEmpty()) {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>                " because some regions failed closing");<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>          }<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>          break;<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        } else {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>        }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        if (sleepInterrupted(200)) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>          interrupted = true;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        }<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      }<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    } finally {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      if (interrupted) {<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        Thread.currentThread().interrupt();<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>    boolean interrupted = false;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    try {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      Thread.sleep(millis);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>    } catch (InterruptedException e) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      LOG.warn("Interrupted while sleeping");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>      interrupted = true;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>    }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>    return interrupted;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  private void shutdownWAL(final boolean close) {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>    if (this.walFactory != null) {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>      try {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        if (close) {<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>          walFactory.close();<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        } else {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>          walFactory.shutdown();<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>        }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      } catch (Throwable e) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span><a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>   *<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>   * @return NamedQueueRecorder<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>   */<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    return this.namedQueueRecorder;<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>  /*<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>   *<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * @param c Extra configuration.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   */<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  throws IOException {<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    try {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      boolean updateRootDir = false;<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        String key = e.getName();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        // The hostname the master sees us as.<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>              this.startcode);<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>            LOG.error(msg);<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>            throw new IOException(msg);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            LOG.error(msg);<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>          }<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>          continue;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>        }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>        String value = e.getValue();<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            updateRootDir = true;<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>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        if (LOG.isDebugEnabled()) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        this.conf.set(key, value);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      createMyEphemeralNode();<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (updateRootDir) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        initializeFileSystem();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      }<a name="line.1568"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private MetricsRegionServer metricsRegionServer;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private ScheduledChore periodicFlusher;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  private volatile WALFactory walFactory;<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  private LogRoller walRoller;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  // A thread which calls reportProcedureDone<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  // flag set after we're done setting up server threads<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  // zookeeper connection and watcher<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  protected final ZKWatcher zooKeeper;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  // master address tracker<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  // Cluster Status Tracker<a name="line.426"></a>
+<span class="sourceLineNo">427</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  // Log Splitting Worker<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private SplitLogWorker splitLogWorker;<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>  // A sleeper that sleeps for msgInterval.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  protected final Sleeper sleeper;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  private final int shortOperationTimeout;<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  // Block cache<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  private BlockCache blockCache;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>  // The cache for mob files<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  private MobFileCache mobFileCache;<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  /** The health check chore. */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  private HealthCheckChore healthCheckChore;<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>  /** The Executor status collect chore. */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private ExecutorStatusChore executorStatusChore;<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>  /** The nonce manager chore. */<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private ScheduledChore nonceManagerChore;<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  /**<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * against Master.<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  protected String useThisHostnameInstead;<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>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Exception will be thrown if both are used.<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   */<a name="line.472"></a>
+<span class="sourceLineNo">473</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  protected String clusterId;<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>  // chore for refreshing store files for secondary regions<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private StorefileRefresherChore storefileRefresher;<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  private RegionServerCoprocessorHost rsHost;<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * HBASE-3787) are:<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  final ServerNonceManager nonceManager;<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>  private UserProvider userProvider;<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  protected final RSRpcServices rpcServices;<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>  private CoordinatedStateManager csm;<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  protected final ConfigurationManager configurationManager;<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  @VisibleForTesting<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  private volatile ThroughputController flushThroughputController;<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<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>   * Provide online slow log responses from ringbuffer<a name="line.541"></a>
+<span class="sourceLineNo">542</span>   */<a name="line.542"></a>
+<span class="sourceLineNo">543</span>  private NamedQueueRecorder namedQueueRecorder = 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>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.548"></a>
+<span class="sourceLineNo">549</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.550"></a>
+<span class="sourceLineNo">551</span>   */<a name="line.551"></a>
+<span class="sourceLineNo">552</span>  private final boolean masterless;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>  /**regionserver codec list **/<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // A timer to shutdown the process if abort takes too long<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * &lt;p/&gt;<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   * Don't start any services or managers in here in the Constructor.<a name="line.564"></a>
+<span class="sourceLineNo">565</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    super("RegionServer");  // thread name<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    TraceUtil.initTracer(conf);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      this.startcode = System.currentTimeMillis();<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.conf = conf;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.dataFsOk = true;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      HFile.checkHFileVersion(this.conf);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      checkCodecs(this.conf);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // Disable usage of meta replicas in the regionserver<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      // Config'ed params<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.595"></a>
+<span class="sourceLineNo">596</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      this.stopped = false;<a name="line.599"></a>
+<span class="sourceLineNo">600</span><a name="line.600"></a>
+<span class="sourceLineNo">601</span>      initNamedQueueRecorder(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      rpcServices = createRpcServices();<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      String hostName =<a name="line.604"></a>
+<span class="sourceLineNo">605</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              : this.useThisHostnameInstead;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>      // login the zookeeper client principal (if using security)<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      // login the server principal (if using secure Hadoop)<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      login(userProvider, hostName);<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      // init superusers and add the server principal (if using security)<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      // or process owner as default super user.<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      Superusers.initialize(conf);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>      boolean isMasterNotCarryTable =<a name="line.619"></a>
+<span class="sourceLineNo">620</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      if (!isMasterNotCarryTable) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        mobFileCache = new MobFileCache(conf);<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>      uncaughtExceptionHandler =<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span><a name="line.630"></a>
+<span class="sourceLineNo">631</span>      initializeFileSystem();<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>      this.configurationManager = new ConfigurationManager();<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      // Open connection to zookeeper and set primary watcher<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        canCreateBaseZNode());<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      if (!this.masterless) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        masterAddressTracker.start();<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        clusterStatusTracker.start();<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        masterAddressTracker = null;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>        clusterStatusTracker = null;<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.rpcServices.start(zooKeeper);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      // class HRS. TODO.<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.choreService = new ChoreService(getName(), true);<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      this.executorService = new ExecutorService(getName());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      putUpWebUI();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    } catch (Throwable t) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      // cause of failed startup is lost.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      LOG.error("Failed construction RegionServer", t);<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      throw t;<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><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    if (!(this instanceof HMaster)) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.676"></a>
+<span class="sourceLineNo">677</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      if (isOnlineLogProviderEnabled) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>      }<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    } else {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      final boolean isBalancerDecisionRecording = conf<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      if (isBalancerDecisionRecording) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>  // HMaster should override this method to load the specific config for master<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.697"></a>
+<span class="sourceLineNo">698</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.699"></a>
+<span class="sourceLineNo">700</span>        throw new IOException(msg);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      } else {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        return rpcServices.isa.getHostName();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      }<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    } else {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return hostname;<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">709</span>  /**<a name="line.709"></a>
+<span class="sourceLineNo">710</span>   * If running on Windows, do windows-specific setup.<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>        conf.reloadConfiguration();<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        cm.notifyAllObservers(conf);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      });<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
+<span class="sourceLineNo">720</span><a name="line.720"></a>
+<span class="sourceLineNo">721</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    NettyEventLoopGroupConfig nelgc =<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    return nelgc;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
+<span class="sourceLineNo">729</span><a name="line.729"></a>
+<span class="sourceLineNo">730</span>  private void initializeFileSystem() throws IOException {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    // (unless all is set to defaults).<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.748"></a>
+<span class="sourceLineNo">749</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>  /**<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   * Wait for an active Master.<a name="line.753"></a>
+<span class="sourceLineNo">754</span>   * See override in Master superclass for how it is used.<a name="line.754"></a>
+<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  protected void waitForMasterActive() {}<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  protected String getProcessName() {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    return REGIONSERVER;<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
+<span class="sourceLineNo">761</span><a name="line.761"></a>
+<span class="sourceLineNo">762</span>  protected boolean canCreateBaseZNode() {<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    return this.masterless;<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>  protected boolean canUpdateTableDescriptor() {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    return false;<a name="line.771"></a>
+<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
+<span class="sourceLineNo">773</span><a name="line.773"></a>
+<span class="sourceLineNo">774</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    return new RSRpcServices(this);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>  }<a name="line.776"></a>
+<span class="sourceLineNo">777</span><a name="line.777"></a>
+<span class="sourceLineNo">778</span>  protected void configureInfoServer() {<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    return RSDumpServlet.class;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>  @Override<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  public boolean registerService(Service instance) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    // No stacking of instances is allowed for a single executorService name<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.793"></a>
+<span class="sourceLineNo">794</span>        " already registered, rejecting request from " + instance);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      return false;<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span><a name="line.797"></a>
+<span class="sourceLineNo">798</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    if (LOG.isDebugEnabled()) {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      LOG.debug(<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    }<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    return true;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>  }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span>  private Configuration cleanupConfiguration() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    Configuration conf = this.conf;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    //   masters' availability.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    //   other internal connections too.<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      // the conf and unset the client ZK related properties<a name="line.819"></a>
+<span class="sourceLineNo">820</span>      conf = new Configuration(this.conf);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    }<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    return conf;<a name="line.823"></a>
+<span class="sourceLineNo">824</span>  }<a name="line.824"></a>
+<span class="sourceLineNo">825</span><a name="line.825"></a>
+<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
+<span class="sourceLineNo">829</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    // check to see if the codec list is available:<a name="line.830"></a>
+<span class="sourceLineNo">831</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    if (codecs == null) return;<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    for (String codec : codecs) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>        throw new IOException("Compression codec " + codec +<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          " not supported, aborting RS construction");<a name="line.836"></a>
+<span class="sourceLineNo">837</span>      }<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    }<a name="line.838"></a>
+<span class="sourceLineNo">839</span>  }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span>  public String getClusterId() {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    return this.clusterId;<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span>  /**<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * Setup our cluster connection if not already initialized.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   */<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    if (asyncClusterConnection == null) {<a name="line.849"></a>
+<span class="sourceLineNo">850</span>      Configuration conf = cleanupConfiguration();<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      User user = userProvider.getCurrent();<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      asyncClusterConnection =<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>    }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   */<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  private void preRegistrationInitialization() {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    try {<a name="line.864"></a>
+<span class="sourceLineNo">865</span>      initializeZooKeeper();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      setupClusterConnection();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>      // Setup RPC client for master communication<a name="line.867"></a>
+<span class="sourceLineNo">868</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    } catch (Throwable t) {<a name="line.869"></a>
+<span class="sourceLineNo">870</span>      // Call stop if error or process will stick around for ever since server<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      // puts up non-daemon threads.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      this.rpcServices.stop();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
+<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * &lt;p&gt;<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * Finally open long-living server short-circuit connection.<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   */<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    justification="cluster Id znode read would give us correct response")<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    // Nothing to do in here if no Master in the mix.<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    if (this.masterless) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      return;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    // block until a master is available.  No point in starting up if no master<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    // running.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    // when ready.<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.900"></a>
+<span class="sourceLineNo">901</span>    if (clusterId == null) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>      // Retrieve clusterId<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      // Since cluster status is now up<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      // ID should have already been set by HMaster<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      try {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        if (clusterId == null) {<a name="line.907"></a>
+<span class="sourceLineNo">908</span>          this.abort("Cluster ID has not been set");<a name="line.908"></a>
+<span class="sourceLineNo">909</span>        }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>        LOG.info("ClusterId : " + clusterId);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      } catch (KeeperException e) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      }<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>    waitForMasterActive();<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    if (isStopped() || isAborted()) {<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      return; // No need for further initialization<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>    // watch for snapshots and other procedures<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    try {<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      rspmHost.loadProcedures(conf);<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      rspmHost.initialize(this);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    } catch (KeeperException e) {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
+<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
+<span class="sourceLineNo">930</span><a name="line.930"></a>
+<span class="sourceLineNo">931</span>  /**<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * if the region server is shut down<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * @param tracker znode tracker to use<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      throws IOException, InterruptedException {<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      if (this.stopped) {<a name="line.941"></a>
+<span class="sourceLineNo">942</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    }<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  }<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>  /**<a name="line.947"></a>
+<span class="sourceLineNo">948</span>   * @return True if the cluster is up.<a name="line.948"></a>
+<span class="sourceLineNo">949</span>   */<a name="line.949"></a>
+<span class="sourceLineNo">950</span>  @Override<a name="line.950"></a>
+<span class="sourceLineNo">951</span>  public boolean isClusterUp() {<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    return this.masterless ||<a name="line.952"></a>
+<span class="sourceLineNo">953</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.953"></a>
+<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
+<span class="sourceLineNo">955</span><a name="line.955"></a>
+<span class="sourceLineNo">956</span>  /**<a name="line.956"></a>
+<span class="sourceLineNo">957</span>   * The HRegionServer sticks in this loop until closed.<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   */<a name="line.958"></a>
+<span class="sourceLineNo">959</span>  @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public void run() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    if (isStopped()) {<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      LOG.info("Skipping run; stopped");<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      return;<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    }<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    try {<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      preRegistrationInitialization();<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    } catch (Throwable e) {<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      abort("Fatal exception during initialization", e);<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    }<a name="line.970"></a>
+<span class="sourceLineNo">971</span><a name="line.971"></a>
+<span class="sourceLineNo">972</span>    try {<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.974"></a>
+<span class="sourceLineNo">975</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.975"></a>
+<span class="sourceLineNo">976</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.979"></a>
+<span class="sourceLineNo">980</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.981"></a>
+<span class="sourceLineNo">982</span>        // come up.<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        LOG.debug("About to register with Master.");<a name="line.983"></a>
+<span class="sourceLineNo">984</span>        RetryCounterFactory rcf =<a name="line.984"></a>
+<span class="sourceLineNo">985</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        RetryCounter rc = rcf.create();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        while (keepLooping()) {<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          if (w == null) {<a name="line.989"></a>
+<span class="sourceLineNo">990</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.990"></a>
+<span class="sourceLineNo">991</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.991"></a>
+<span class="sourceLineNo">992</span>            this.sleeper.sleep(sleepTime);<a name="line.992"></a>
+<span class="sourceLineNo">993</span>          } else {<a name="line.993"></a>
+<span class="sourceLineNo">994</span>            handleReportForDutyResponse(w);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>            break;<a name="line.995"></a>
+<span class="sourceLineNo">996</span>          }<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        }<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      }<a name="line.998"></a>
+<span class="sourceLineNo">999</span><a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>        // start the snapshot handler and other procedure handlers,<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>        // since the server is ready to run<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>        if (this.rspmHost != null) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>          this.rspmHost.start();<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        }<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        // Start the Quota Manager<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>        if (this.rsQuotaManager != null) {<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>        }<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>          this.rsSpaceQuotaManager.start();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>        }<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span><a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // We registered with the Master.  Go into run mode.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      long lastMsg = System.currentTimeMillis();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      long oldRequestCount = -1;<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      // The main run loop.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        if (!isClusterUp()) {<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>          if (onlineRegions.isEmpty()) {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          } else if (!this.stopping) {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>            this.stopping = true;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>            LOG.info("Closing user regions");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>            closeUserRegions(this.abortRequested.get());<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>          } else {<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>            if (allUserRegionsOffline) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>              // Set stopped if no more write requests tp meta tables<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>              // since last time we went around the loop.  Any open<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>              // meta regions will be closed on our way out.<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>                break;<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>              }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>              oldRequestCount = getWriteRequestCount();<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>            } else {<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>              // Make sure all regions have been closed -- some regions may<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>              // have not got it because we were splitting at the time of<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>              // the call to closeUserRegions.<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>              closeUserRegions(this.abortRequested.get());<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>            }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>          }<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>        }<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>        long now = System.currentTimeMillis();<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>          tryRegionServerReport(lastMsg, now);<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          lastMsg = System.currentTimeMillis();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>        }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>          this.sleeper.sleep();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>        }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      } // for<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    } catch (Throwable t) {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        abort(prefix + t.getMessage(), t);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span><a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    if (this.leaseManager != null) {<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    if (this.splitLogWorker != null) {<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      splitLogWorker.stop();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (this.infoServer != null) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      LOG.info("Stopping infoServer");<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      try {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>        this.infoServer.stop();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      } catch (Exception e) {<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // Send cache a shutdown.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (blockCache != null) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      blockCache.shutdown();<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    if (mobFileCache != null) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      mobFileCache.shutdown();<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span><a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    if (rspmHost != null) {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    if (this.killed) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } else if (abortRequested.get()) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      if (this.dataFsOk) {<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      }<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      LOG.info("aborting server " + this.serverName);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    } else {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      closeUserRegions(abortRequested.get());<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      LOG.info("stopping server " + this.serverName);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span><a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    if (this.asyncClusterConnection != null) {<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      try {<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        this.asyncClusterConnection.close();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      } catch (IOException e) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        if (this.compactSplitThread != null) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>          this.compactSplitThread.join();<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>          this.compactSplitThread = null;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>        }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>      }<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    // Stop the quota manager<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    if (rsQuotaManager != null) {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      rsQuotaManager.stop();<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    if (rsSpaceQuotaManager != null) {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager.stop();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      rsSpaceQuotaManager = null;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    }<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span><a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    // flag may be changed when closing regions throws exception.<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (this.dataFsOk) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      shutdownWAL(!abortRequested.get());<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span><a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    // Make sure the proxy is down.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    if (this.rssStub != null) {<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      this.rssStub = null;<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    if (this.lockStub != null) {<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      this.lockStub = null;<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    }<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (this.rpcClient != null) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      this.rpcClient.close();<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    if (this.leaseManager != null) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      this.leaseManager.close();<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    if (this.pauseMonitor != null) {<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      this.pauseMonitor.stop();<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    if (!killed) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      stopServiceThreads();<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span><a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    if (this.rpcServices != null) {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>      this.rpcServices.stop();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    }<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span><a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    try {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      deleteMyEphemeralNode();<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      // pass<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    } catch (KeeperException e) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span><a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    if (this.zooKeeper != null) {<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>      this.zooKeeper.close();<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>    this.shutDown = true;<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  private boolean containsMetaTableRegions() {<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  private boolean areAllUserRegionsOffline() {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    boolean allUserRegionsOffline = true;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>        allUserRegionsOffline = false;<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        break;<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      }<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    return allUserRegionsOffline;<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  /**<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   * @return Current write count for all online regions.<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private long getWriteRequestCount() {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    long writeCount = 0;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    return writeCount;<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>  }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span><a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  @VisibleForTesting<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      throws IOException {<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>      return;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      request.setLoad(sl);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      rss.regionServerReport(null, request.build());<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    } catch (ServiceException se) {<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>        // This will be caught and handled as a fatal error in run()<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        throw ioe;<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      if (rssStub == rss) {<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>        rssStub = null;<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      }<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      // Method blocks until new master is found or we are stopped<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      createRegionServerStatusStub(true);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  }<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span><a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>  /**<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>   *<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   * @param regionSizeStore The store containing region sizes<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>   */<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    if (rss == null) {<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      // the current server could be stopping.<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      return true;<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    }<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    try {<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>    } catch (ServiceException se) {<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>            + " This will be retried.", ioe);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>        return true;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>      if (rssStub == rss) {<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        rssStub = null;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>      }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>      createRegionServerStatusStub(true);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>            return false;<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>          }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>        }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>      }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>    }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    return true;<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>  /**<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   *<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @param rss The stub to send to the Master<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   * @param regionSizeStore The store containing region sizes<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>    RegionSpaceUseReportRequest request =<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    // Record the number of size reports sent<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>    if (metricsRegionServer != null) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  /**<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>   *<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>   * @param regionSizes The size in bytes of regions<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>   * @return The corresponding protocol buffer message.<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>   */<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    return request.build();<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>  }<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  /**<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>   * protobuf message.<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>   *<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>   * @param regionInfo The RegionInfo<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>   * @return The protocol buffer<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>   */<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    return RegionSpaceUse.newBuilder()<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>        .build();<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  }<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span><a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>      throws IOException {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    // the wrapper to compute those numbers in one place.<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    // history.<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    long usedMemory = -1L;<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    long maxMemory = -1L;<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>    if (usage != null) {<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>      usedMemory = usage.getUsed();<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>    for (String coprocessor : coprocessors) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>    }<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    for (HRegion region : regions) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      if (region.getCoprocessorHost() != null) {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          .getCoprocessors()) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    if (this.infoServer != null) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>    } else {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      serverLoad.setInfoServerPort(-1);<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    MetricsUserAggregateSource userSource =<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    if (userSource != null) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    if (sameReplicationSourceAndSink &amp;&amp; replicationSourceHandler != null) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      // always refresh first to get the latest value<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>      ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      if (rLoad != null) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>          .getReplicationLoadSourceEntries()) {<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    } else {<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      if (replicationSourceHandler != null) {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        if (rLoad != null) {<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>          for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>            .getReplicationLoadSourceEntries()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>            serverLoad.addReplLoadSource(rLS);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          }<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        }<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      if (replicationSinkHandler != null) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        ReplicationLoad rLoad = replicationSinkHandler.refreshAndGetReplicationLoad();<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>        if (rLoad != null) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>          serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    return serverLoad.build();<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span><a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    StringBuilder sb = new StringBuilder();<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    return sb.toString();<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>  }<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span><a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>  /**<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>   * Wait on regions close.<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   */<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    // Wait till all regions are closed before going out.<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    int lastCount = -1;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    long previousLogTime = 0;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>    boolean interrupted = false;<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>    try {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      while (!onlineRegions.isEmpty()) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        int count = getNumberOfOnlineRegions();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        // Only print a message if the count of regions has changed.<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>        if (count != lastCount) {<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>          // Log every second at most<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>            previousLogTime = System.currentTimeMillis();<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>            lastCount = count;<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>            // Only print out regions still closing if a small number else will<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>            // swamp the log.<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>            }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>          }<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        // protect against the case where an open comes in after we start the<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        // iterator of onlineRegions to close all user regions.<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>            closedRegions.add(hri.getEncodedName());<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>            // Don't update zk with this close transition; pass false.<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>          }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        // No regions in RIT, we could stop waiting now.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>          if (!onlineRegions.isEmpty()) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>                " because some regions failed closing");<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          }<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          break;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        }<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        if (sleepInterrupted(200)) {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>          interrupted = true;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        }<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    } finally {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      if (interrupted) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        Thread.currentThread().interrupt();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      }<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>    }<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    boolean interrupted = false;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    try {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>      Thread.sleep(millis);<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    } catch (InterruptedException e) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>      LOG.warn("Interrupted while sleeping");<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      interrupted = true;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    return interrupted;<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>  }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>  private void shutdownWAL(final boolean close) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    if (this.walFactory != null) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      try {<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        if (close) {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>          walFactory.close();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        } else {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          walFactory.shutdown();<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (Throwable e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      }<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span><a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>  /**<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   *<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   * @return NamedQueueRecorder<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>   */<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>    return this.namedQueueRecorder;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>  /*<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>   *<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>   * @param c Extra configuration.<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>   */<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  throws IOException {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    try {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      boolean updateRootDir = false;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>        String key = e.getName();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>        // The hostname the master sees us as.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              this.startcode);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>            LOG.error(msg);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>            throw new IOException(msg);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>          }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            LOG.error(msg);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>          }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          continue;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>        }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span><a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        String value = e.getValue();<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>            updateRootDir = true;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>          }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        }<a name="line.1568"></a>
 <span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1573"></a>
+<span class="sourceLineNo">1570</span>        if (LOG.isDebugEnabled()) {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        this.conf.set(key, value);<a name="line.1573"></a>
 <span class="sourceLineNo">1574</span>      }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      // Save it in a file, this will allow to see if we crash<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      setupWALAndReplication();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      final MetricsTable metricsTable =<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      pauseMonitor.start();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>        startServices();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      // or make sense of it.<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      startReplicationService();<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span><a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      // Set up ZK<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>          ", sessionid=0x" +<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span><a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      // Wake up anyone waiting for this server to online<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>      synchronized (online) {<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        online.set(true);<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        online.notifyAll();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    } catch (Throwable e) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      stop("Failed initialization");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>          "Region server startup failed");<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    } finally {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      sleeper.skipSleepCycle();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      // it.<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      // init the chunkCreator<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  }<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span><a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  private void startHeapMemoryManager() {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    if (this.blockCache != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      this.hMemManager =<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      this.hMemManager.start(getChoreService());<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>    }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>  }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span><a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  @Override<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>    return regionServerAccounting;<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   * @param r Region to get RegionLoad for.<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>   * @return RegionLoad instance.<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>   */<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>    int stores = 0;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    int storefiles = 0;<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>    int storeRefCount = 0;<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    int storeUncompressedSizeMB = 0;<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    int storefileSizeMB = 0;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    long storefileIndexSizeKB = 0;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>    int rootLevelIndexSizeKB = 0;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    int totalStaticIndexSizeKB = 0;<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    int totalStaticBloomSizeKB = 0;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    long totalCompactingKVs = 0;<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    long currentCompactedKVs = 0;<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>    stores += storeList.size();<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>    for (HStore store : storeList) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      storefiles += store.getStorefilesCount();<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      storeRefCount += currentStoreRefCount;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>      if (progress != null) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>      }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>    }<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span><a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    if (regionLoadBldr == null) {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    if (regionSpecifier == null) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1721"></a>
+<span class="sourceLineNo">1575</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      createMyEphemeralNode();<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span><a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      if (updateRootDir) {<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        initializeFileSystem();<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span><a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      }<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span><a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      // Save it in a file, this will allow to see if we crash<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      setupWALAndReplication();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      final MetricsTable metricsTable =<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      pauseMonitor.start();<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        startServices();<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      // or make sense of it.<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      startReplicationService();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span><a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      // Set up ZK<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          ", sessionid=0x" +<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span><a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>      // Wake up anyone waiting for this server to online<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      synchronized (online) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        online.set(true);<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        online.notifyAll();<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>    } catch (Throwable e) {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      stop("Failed initialization");<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>          "Region server startup failed");<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    } finally {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      sleeper.skipSleepCycle();<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>  }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span><a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>      // it.<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      // init the chunkCreator<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>  }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span><a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>  private void startHeapMemoryManager() {<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    if (this.blockCache != null) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      this.hMemManager =<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      this.hMemManager.start(getChoreService());<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>  }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span><a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>  }<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span><a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>  }<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span><a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  @Override<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    return regionServerAccounting;<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  }<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span><a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /**<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @param r Region to get RegionLoad for.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>   * @return RegionLoad instance.<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>   */<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    int stores = 0;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    int storefiles = 0;<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    int storeRefCount = 0;<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>    int storeUncompressedSizeMB = 0;<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    int storefileSizeMB = 0;<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    long storefileIndexSizeKB = 0;<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>    int rootLevelIndexSizeKB = 0;<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    int totalStaticIndexSizeKB = 0;<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    int totalStaticBloomSizeKB = 0;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    long totalCompactingKVs = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    long currentCompactedKVs = 0;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    stores += storeList.size();<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    for (HStore store : storeList) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      storefiles += store.getStorefilesCount();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>      storeRefCount += currentStoreRefCount;<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (progress != null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>    }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      .setStores(stores)<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>      .setStorefiles(storefiles)<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>      .setStoreRefCount(storeRefCount)<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      .setDataLocality(dataLocality)<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    return regionLoadBldr.build();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>  }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span><a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    userLoadBldr.setUserName(user);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>            .setHostName(clientMetrics.getHostName())<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return userLoadBldr.build();<a name="line.1764"></a>
+<span class="sourceLineNo">1723</span><a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    if (regionLoadBldr == null) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    if (regionSpecifier == null) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>      .setStores(stores)<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      .setStorefiles(storefiles)<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>      .setStoreRefCount(storeRefCount)<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      .setDataLocality(dataLocality)<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span><a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    return regionLoadBldr.build();<a name="line.1764"></a>
 <span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
 <span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  }<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span><a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  /**<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>   */<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private final HRegionServer instance;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    private final int majorCompactPriority;<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    // immediately upon region server startup<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    private long iteration = 1;<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      this.instance = h;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      /* MajorCompactPriority is configurable.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>       * If not set, the compaction will use default priority.<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>       */<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              DEFAULT_PRIORITY);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
+<span class="sourceLineNo">1767</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>    userLoadBldr.setUserName(user);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>            .setHostName(clientMetrics.getHostName())<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    return userLoadBldr.build();<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>  }<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span><a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>  /**<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>   */<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    private final HRegionServer instance;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    private final int majorCompactPriority;<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    // immediately upon region server startup<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    private long iteration = 1;<a name="line.1794"></a>
 <span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    protected void chore() {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        // Skip compaction if region is read only<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>        if (r == null || r.isReadOnly()) {<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          continue;<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>        }<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        HRegion hr = (HRegion) r;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        for (HStore s : hr.stores.values()) {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          try {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            assert multiplier &gt; 0;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>            if (iteration % multiplier != 0) {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>              continue;<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            if (s.needsCompaction()) {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>                getName() + " requests compaction");<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>              s.triggerMajorCompaction();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>                    getName() + " requests major compaction; use default priority",<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                    Store.NO_PRIORITY,<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>              } else {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>              }<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>            }<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>          } catch (IOException e) {<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>          }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        }<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>  }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span><a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    private final HRegionServer server;<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    private final long rangeOfDelayMs;<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span><a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      this.server = server;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span><a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span><a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    @Override<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    protected void chore() {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        if (r == null) continue;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>          if (requester != null) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>                  randomDelay);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>            }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>          }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      }<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>  }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  /**<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * method is designed mostly to be useful in tests.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   *<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>   * @return true if online, false if not.<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   */<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>  public boolean isOnline() {<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    return online.get();<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  }<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span><a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  /**<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * be hooked up to WAL.<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   */<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>  private void setupWALAndReplication() throws IOException {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>    WALFactory factory =<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span><a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      LOG.debug("logDir={}", logDir);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      if (this.walFs.exists(logDir)) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        throw new RegionServerRunningException(<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      // region servers.<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        factory.getWALProvider());<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    }<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>    this.walFactory = factory;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  /**<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>   * Start up replication source and sink handlers.<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>   */<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  private void startReplicationService() throws IOException {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        this.replicationSourceHandler != null) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } else {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      if (this.replicationSourceHandler != null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      if (this.replicationSinkHandler != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span><a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  /**<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>   * @return Master address tracker instance.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   */<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    return this.masterAddressTracker;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>  }<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span><a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>  /**<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>   * registered with the Master.<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>   * hosting server. Worker logs the exception and exits.<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>   */<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>  private void startServices() throws IOException {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      initializeThreads();<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    this.secureBulkLoadManager.start();<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span><a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    // Health checker thread.<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    if (isHealthCheckerConfigured()) {<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    // Executor status collect thread.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span><a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    this.walRoller = new LogRoller(this);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span><a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    int cleanerInterval =<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    this.compactedFileDischarger =<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span><a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    // Start executor services<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    // Start the threads for compacted files discharger<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    }<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span><a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        uncaughtExceptionHandler);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>    if (this.cacheFlusher != null) {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2029"></a>
+<span class="sourceLineNo">1796</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      this.instance = h;<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span><a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      /* MajorCompactPriority is configurable.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>       * If not set, the compaction will use default priority.<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>       */<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>              DEFAULT_PRIORITY);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    @Override<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    protected void chore() {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        // Skip compaction if region is read only<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        if (r == null || r.isReadOnly()) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>          continue;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        HRegion hr = (HRegion) r;<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>        for (HStore s : hr.stores.values()) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          try {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>            assert multiplier &gt; 0;<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>            if (iteration % multiplier != 0) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>              continue;<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>            }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>            if (s.needsCompaction()) {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>                getName() + " requests compaction");<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>              s.triggerMajorCompaction();<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>                    getName() + " requests major compaction; use default priority",<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>                    Store.NO_PRIORITY,<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>              } else {<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>              }<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            }<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>          } catch (IOException e) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    private final HRegionServer server;<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    private final long rangeOfDelayMs;<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      this.server = server;<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span><a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    @Override<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    protected void chore() {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        if (r == null) continue;<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          if (requester != null) {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>                  randomDelay);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>            }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>          }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>        }<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      }<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    }<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  }<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>  /**<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * method is designed mostly to be useful in tests.<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   * @return true if online, false if not.<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   */<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public boolean isOnline() {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    return online.get();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>  }<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span><a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>  /**<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * be hooked up to WAL.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   */<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>  private void setupWALAndReplication() throws IOException {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    WALFactory factory =<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span><a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      LOG.debug("logDir={}", logDir);<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (this.walFs.exists(logDir)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new RegionServerRunningException(<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      // region servers.<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        factory.getWALProvider());<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>    }<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    this.walFactory = factory;<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>  }<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span><a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>  /**<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>   * Start up replication source and sink handlers.<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>   */<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  private void startReplicationService() throws IOException {<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    } else {<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      if (this.replicationSourceHandler != null) {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      if (this.replicationSinkHandler != null) {<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    }<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  }<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span><a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  /**<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>   * @return Master address tracker instance.<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>   */<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    return this.masterAddressTracker;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>  }<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span><a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>  /**<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>   * registered with the Master.<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>   * hosting server. Worker logs the exception and exits.<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>   */<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>  private void startServices() throws IOException {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>      initializeThreads();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>    }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>    this.secureBulkLoadManager.start();<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    // Health checker thread.<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>    if (isHealthCheckerConfigured()) {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    // Executor status collect thread.<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span><a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    this.walRoller = new LogRoller(this);<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    int cleanerInterval =<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    this.compactedFileDischarger =<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span><a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // Start executor services<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>    // Start the threads for compacted files discharger<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    if (this.compactionChecker != null) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      choreService.scheduleChore(compactionChecker);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>    }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    if (this.periodicFlusher != null) {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    if (this.healthCheckChore != null) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2041"></a>
+<span class="sourceLineNo">2031</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>        uncaughtExceptionHandler);<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    if (this.cacheFlusher != null) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2041"></a>
 <span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    if (this.executorStatusChore != null) {<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    if (this.nonceManagerChore != null) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2047"></a>
+<span class="sourceLineNo">2043</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    if (this.compactionChecker != null) {<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>      choreService.scheduleChore(compactionChecker);<a name="line.2047"></a>
 <span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    if (this.storefileRefresher != null) {<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2050"></a>
+<span class="sourceLineNo">2049</span>    if (this.periodicFlusher != null) {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2050"></a>
 <span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    if (this.fsUtilizationChore != null) {<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2053"></a>
+<span class="sourceLineNo">2052</span>    if (this.healthCheckChore != null) {<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2053"></a>
 <span class="sourceLineNo">2054</span>    }<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2056"></a>
+<span class="sourceLineNo">2055</span>    if (this.executorStatusChore != null) {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2056"></a>
 <span class="sourceLineNo">2057</span>    }<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span><a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    // an unhandled exception, it will just exit.<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        uncaughtExceptionHandler);<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    // Create the log splitting worker and start it<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      splitLogWorker.start();<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>      LOG.debug("SplitLogWorker started");<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>    }<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span><a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>    // Memstore services.<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    startHeapMemoryManager();<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    // Call it after starting HeapMemoryManager.<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    initializeMemStoreChunkCreator();<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  }<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>  private void initializeThreads() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    // Cache flushing thread.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span><a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    // Compaction thread<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span><a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>    if (isSlowLogTableEnabled) {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>      // default chore duration: 10 min<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span><a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    if (this.nonceManager != null) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span><a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // Setup the Quota Manager<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    }<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span><a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    boolean onlyMetaRefresh = false;<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (storefileRefreshPeriod == 0) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      onlyMetaRefresh = true;<a name="line.2131"></a>
+<span class="sourceLineNo">2058</span>    if (this.nonceManagerChore != null) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>    }<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>    if (this.storefileRefresher != null) {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>    }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>    if (this.fsUtilizationChore != null) {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    }<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    // an unhandled exception, it will just exit.<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        uncaughtExceptionHandler);<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>    // Create the log splitting worker and start it<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>      splitLogWorker.start();<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      LOG.debug("SplitLogWorker started");<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span><a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    // Memstore services.<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>    startHeapMemoryManager();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>    // Call it after starting HeapMemoryManager.<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    initializeMemStoreChunkCreator();<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span><a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>  private void initializeThreads() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    // Cache flushing thread.<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span><a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>    // Compaction thread<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span><a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span><a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    if (isSlowLogTableEnabled) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>      // default chore duration: 10 min<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    if (this.nonceManager != null) {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>    }<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span><a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>    // Setup the Quota Manager<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span><a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>          onlyMetaRefresh, this, this);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    }<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    registerConfigurationObservers();<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span><a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>  private void registerConfigurationObservers() {<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    configurationManager.registerObserver(this);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>  }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  /**<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>   * Puts up the webui.<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>   */<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>  private void putUpWebUI() throws IOException {<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>    if(this instanceof HMaster) {<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    // -1 is for disabling info server<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    if (port &lt; 0) {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      return;<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>      String msg =<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          "Failed to start http info server. Address " + addr<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>      LOG.error(msg);<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      throw new IOException(msg);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    // check if auto port bind enabled<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    while (true) {<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>      try {<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>        configureInfoServer();<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        this.infoServer.start();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        break;<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      } catch (BindException e) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        if (!auto) {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          // auto bind disabled throw BindException<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          throw e;<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>        // auto bind enabled, try to use another port<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>        port++;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    port = this.infoServer.getPort();<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>  }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span><a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  /*<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>   * Verify that server is healthy<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   */<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  private boolean isHealthy() {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    if (!dataFsOk) {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      // File system problem<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return false;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>    // Verify that all threads are alive<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    if (!healthy) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    return healthy;<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  }<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span><a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  @Override<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    return walFactory.getWALs();<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>  }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span><a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  @Override<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    if (this.walRoller != null) {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>      this.walRoller.addWAL(wal);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return wal;<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>  }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span><a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>  public LogRoller getWalRoller() {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    return walRoller;<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span><a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  WALFactory getWalFactory() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return walFactory;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  @Override<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  public Connection getConnection() {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    return getAsyncConnection().toConnection();<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  @Override<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>  public void stop(final String msg) {<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>  }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span><a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>  /**<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>   * Stops the regionserver.<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * @param msg Status message<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * @param force True if this is a regionserver abort<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   */<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    if (!this.stopped) {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      if (this.rsHost != null) {<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        // when forced via abort don't allow CPs to override<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>        try {<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>          this.rsHost.preStop(msg, user);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>        } catch (IOException ioe) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>          if (!force) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>            return;<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>          }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      this.stopped = true;<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      LOG.info("STOPPED: " + msg);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      // Wakes run() if it is sleeping<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      sleeper.skipSleepCycle();<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public void waitForServerOnline(){<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      synchronized (online) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        try {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>          online.wait(msgInterval);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>        } catch (InterruptedException ie) {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>          Thread.currentThread().interrupt();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>          break;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>        }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      }<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span><a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>  @Override<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    HRegion r = context.getRegion();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>    long openProcId = context.getOpenProcId();<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    rpcServices.checkOpen();<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>    // Skip compaction check if region is read only<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>    if (!r.isReadOnly()) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      for (HStore s : r.stores.values()) {<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>        }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      }<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      LOG.error(<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      openSeqNum = 0;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>    }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // Notify master<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      throw new IOException(<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    }<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span><a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    triggerFlushInPrimaryRegion(r);<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span><a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span><a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    boolean onlyMetaRefresh = false;<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    if (storefileRefreshPeriod == 0) {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      onlyMetaRefresh = true;<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    }<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>          onlyMetaRefresh, this, this);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    registerConfigurationObservers();<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>  }<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span><a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>  private void registerConfigurationObservers() {<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>    configurationManager.registerObserver(this);<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  }<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span><a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>  /**<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>   * Puts up the webui.<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>   */<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  private void putUpWebUI() throws IOException {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span><a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    if(this instanceof HMaster) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>    }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>    // -1 is for disabling info server<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    if (port &lt; 0) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      return;<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span><a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      String msg =<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          "Failed to start http info server. Address " + addr<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>      LOG.error(msg);<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>      throw new IOException(msg);<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>    }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    // check if auto port bind enabled<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    while (true) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      try {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>        configureInfoServer();<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>        this.infoServer.start();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>        break;<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      } catch (BindException e) {<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>        if (!auto) {<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>          // auto bind disabled throw BindException<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>          throw e;<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>        }<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>        // auto bind enabled, try to use another port<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        port++;<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    }<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>    port = this.infoServer.getPort();<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span><a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  /*<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   * Verify that server is healthy<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>   */<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>  private boolean isHealthy() {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    if (!dataFsOk) {<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      // File system problem<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      return false;<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    // Verify that all threads are alive<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>    if (!healthy) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>    return healthy;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  }<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span><a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>  @Override<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>    return walFactory.getWALs();<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span><a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>  @Override<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>    if (this.walRoller != null) {<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      this.walRoller.addWAL(wal);<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    }<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    return wal;<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>  }<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span><a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>  public LogRoller getWalRoller() {<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>    return walRoller;<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>  }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span><a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>  WALFactory getWalFactory() {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>    return walFactory;<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>  }<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span><a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>  @Override<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>  public Connection getConnection() {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    return getAsyncConnection().toConnection();<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  @Override<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>  public void stop(final String msg) {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Stops the regionserver.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param msg Status message<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @param force True if this is a regionserver abort<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   */<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    if (!this.stopped) {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      if (this.rsHost != null) {<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>        // when forced via abort don't allow CPs to override<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>        try {<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>          this.rsHost.preStop(msg, user);<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>        } catch (IOException ioe) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>          if (!force) {<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>            return;<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>          }<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>        }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>      }<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      this.stopped = true;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      LOG.info("STOPPED: " + msg);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      // Wakes run() if it is sleeping<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      sleeper.skipSleepCycle();<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>    }<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>  }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span><a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  public void waitForServerOnline(){<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      synchronized (online) {<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        try {<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>          online.wait(msgInterval);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>        } catch (InterruptedException ie) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>          Thread.currentThread().interrupt();<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          break;<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>        }<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    }<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span><a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  @Override<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    HRegion r = context.getRegion();<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>    long openProcId = context.getOpenProcId();<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>    rpcServices.checkOpen();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>    // Skip compaction check if region is read only<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    if (!r.isReadOnly()) {<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      for (HStore s : r.stores.values()) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>        }<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      }<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>      LOG.error(<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      openSeqNum = 0;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>    }<a name="line.2329"></a>
 <span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>  /**<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>   * around to receive it.<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>   */<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>    final TransitionCode code = context.getCode();<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>    final RegionInfo[] hris = context.getHris();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span><a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>    if (code == TransitionCode.OPENED) {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>      if (hris[0].isMetaRegion()) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        try {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>        } catch (KeeperException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>          LOG.info("Failed to update meta location", e);<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          return false;<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      } else {<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>        try {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        } catch (IOException e) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>          LOG.info("Failed to update meta", e);<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>          return false;<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        }<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    return true;<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>      final RegionStateTransitionContext context) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    final TransitionCode code = context.getCode();<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    final RegionInfo[] hris = context.getHris();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    final long[] procIds = context.getProcIds();<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span><a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    transition.setTransitionCode(code);<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>    }<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    for (RegionInfo hri: hris) {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    for (long procId: procIds) {<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>      transition.addProcId(procId);<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span><a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    return builder.build();<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>  }<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span><a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  @Override<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>      return skipReportingTransition(context);<a name="line.2392"></a>
+<span class="sourceLineNo">2331</span>    // Notify master<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>      throw new IOException(<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    }<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    triggerFlushInPrimaryRegion(r);<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span><a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>  }<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span><a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>  /**<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>   * around to receive it.<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>   */<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>    final TransitionCode code = context.getCode();<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    final RegionInfo[] hris = context.getHris();<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span><a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>    if (code == TransitionCode.OPENED) {<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>      if (hris[0].isMetaRegion()) {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>        try {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        } catch (KeeperException e) {<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>          LOG.info("Failed to update meta location", e);<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>          return false;<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>        }<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      } else {<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>        try {<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>        } catch (IOException e) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>          LOG.info("Failed to update meta", e);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>          return false;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>        }<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>      }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    }<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>    return true;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>  }<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span><a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>      final RegionStateTransitionContext context) {<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    final TransitionCode code = context.getCode();<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    final RegionInfo[] hris = context.getHris();<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    final long[] procIds = context.getProcIds();<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span><a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    transition.setTransitionCode(code);<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    }<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    for (RegionInfo hri: hris) {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>    }<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    final ReportRegionStateTransitionRequest request =<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>        createReportRegionStateTransitionRequest(context);<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    final long initPauseTime = 1000;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    int tries = 0;<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    long pauseTime;<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>    // HRegionServer does down.<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      try {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        if (rss == null) {<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>          createRegionServerStatusStub();<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>          continue;<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        }<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>        ReportRegionStateTransitionResponse response =<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>          rss.reportRegionStateTransition(null, request);<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>        if (response.hasErrorMessage()) {<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          break;<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        }<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>        }<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>        // NOTE: Return mid-method!!!<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>        return true;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>      } catch (ServiceException se) {<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        boolean pause =<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        if (pause) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          // Do backoff else we flood the Master with requests.<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>        } else {<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>          pauseTime = initPauseTime; // Reset.<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>        }<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        LOG.info("Failed report transition " +<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            (pause?<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>                " immediately."),<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>            ioe);<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        tries++;<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        if (rssStub == rss) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>          rssStub = null;<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>        }<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>      }<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>    }<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    return false;<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>  }<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span><a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>  /**<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>   */<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      return;<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>          region.conf)) {<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      region.setReadsEnabled(true);<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>      return;<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    }<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span><a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span><a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    if (this.executorService != null) {<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>    } else {<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>        region.getRegionInfo());<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>     }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>  }<a name="line.2476"></a>
+<span class="sourceLineNo">2394</span>    for (long procId: procIds) {<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>      transition.addProcId(procId);<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>    return builder.build();<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>  }<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span><a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  @Override<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>      return skipReportingTransition(context);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    final ReportRegionStateTransitionRequest request =<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>        createReportRegionStateTransitionRequest(context);<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span><a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>    final long initPauseTime = 1000;<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    int tries = 0;<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    long pauseTime;<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>    // HRegionServer does down.<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>      try {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>        if (rss == null) {<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>          createRegionServerStatusStub();<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>          continue;<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>        }<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>        ReportRegionStateTransitionResponse response =<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>          rss.reportRegionStateTransition(null, request);<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>        if (response.hasErrorMessage()) {<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>          break;<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>        }<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>        }<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>        // NOTE: Return mid-method!!!<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>        return true;<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>      } catch (ServiceException se) {<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>        boolean pause =<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>        if (pause) {<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>          // Do backoff else we flood the Master with requests.<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>        } else {<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>          pauseTime = initPauseTime; // Reset.<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>        }<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>        LOG.info("Failed report transition " +<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>            (pause?<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>                " immediately."),<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>            ioe);<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>        tries++;<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>        if (rssStub == rss) {<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>          rssStub = null;<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>        }<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      }<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>    }<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>    return false;<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>  }<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span><a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>  /**<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>   */<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>      return;<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>    }<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>          region.conf)) {<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>      region.setReadsEnabled(true);<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>      return;<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>    }<a name="line.2476"></a>
 <span class="sourceLineNo">2477</span><a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>  @Override<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>  public RpcServerInterface getRpcServer() {<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    return rpcServices.rpcServer;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>  }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>  @VisibleForTesting<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>  public RSRpcServices getRSRpcServices() {<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    return rpcServices;<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>  }<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span><a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>  /**<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>   *<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>   * @param reason<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>   *          the reason we are aborting<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>   * @param cause<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>   *          the exception that caused the abort, or null<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>   */<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>  @Override<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>  public void abort(String reason, Throwable cause) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    if (!setAbortRequested()) {<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      // Abort already in progress, ignore the new request.<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>      LOG.debug(<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      return;<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    }<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    if (cause != null) {<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    } else {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>    }<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>    try {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span><a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>    try {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (cause != null) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      }<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      // Report to the master but only if we have already registered with the master.<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>        builder.setErrorMessage(msg);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    } catch (Throwable t) {<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span><a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>    scheduleAbortTimer();<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>    // shutdown should be run as the internal user<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>    stop(reason, true, null);<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>  }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>  /**<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>   * Sets the abort state if not already set.<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>   * progress.<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>   */<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>  protected boolean setAbortRequested() {<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    return abortRequested.compareAndSet(false, true);<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>  }<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span><a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>  /**<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>   */<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>  public void abort(String reason) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>    abort(reason, null);<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>  }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>  @Override<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>  public boolean isAborted() {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    return abortRequested.get();<a name="line.2565"></a>
+<span class="sourceLineNo">2478</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span><a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>    if (this.executorService != null) {<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>    } else {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>        region.getRegionInfo());<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>     }<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>  }<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span><a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>  @Override<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>  public RpcServerInterface getRpcServer() {<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    return rpcServices.rpcServer;<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>  }<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span><a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>  @VisibleForTesting<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>  public RSRpcServices getRSRpcServices() {<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    return rpcServices;<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  }<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span><a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>  /**<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>   *<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>   * @param reason<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>   *          the reason we are aborting<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>   * @param cause<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>   *          the exception that caused the abort, or null<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>   */<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>  @Override<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  public void abort(String reason, Throwable cause) {<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>    if (!setAbortRequested()) {<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>      // Abort already in progress, ignore the new request.<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>      LOG.debug(<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>      return;<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    }<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>    if (cause != null) {<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>    } else {<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>    }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    try {<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>    }<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span><a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>    try {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>      if (cause != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      // Report to the master but only if we have already registered with the master.<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>        builder.setErrorMessage(msg);<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>      }<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>    } catch (Throwable t) {<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span><a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    scheduleAbortTimer();<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>    // shutdown should be run as the internal user<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>    stop(reason, true, null);<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>  }<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span><a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>  /**<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>   * Sets the abort state if not already set.<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>   * progress.<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>   */<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>  protected boolean setAbortRequested() {<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    return abortRequested.compareAndSet(false, true);<a name="line.2565"></a>
 <span class="sourceLineNo">2566</span>  }<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span><a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>  /*<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>   * hostname+port immediately.<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>   */<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>  @VisibleForTesting<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>  protected void kill() {<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>    this.killed = true;<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>    abort("Simulated kill");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>  }<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span><a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>  // Limits the time spent in the shutdown process.<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>  private void scheduleAbortTimer() {<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    if (this.abortMonitor == null) {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      TimerTask abortTimeoutTask = null;<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      try {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>        timerTaskCtor.setAccessible(true);<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      } catch (Exception e) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>      }<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      if (abortTimeoutTask != null) {<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      }<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>    }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>  }<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span><a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  /**<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>   * have already been called.<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>   */<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>  protected void stopServiceThreads() {<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>    // clean up the scheduled chores<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    if (this.choreService != null) {<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      choreService.cancelChore(compactionChecker);<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      choreService.cancelChore(periodicFlusher);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>      choreService.cancelChore(healthCheckChore);<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>      choreService.cancelChore(executorStatusChore);<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>      choreService.cancelChore(storefileRefresher);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      choreService.shutdown();<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span><a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>    if (this.cacheFlusher != null) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>      this.cacheFlusher.join();<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>    }<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span><a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    if (this.spanReceiverHost != null) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>      this.spanReceiverHost.closeReceivers();<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>    }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    if (this.walRoller != null) {<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      this.walRoller.close();<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>    }<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    if (this.compactSplitThread != null) {<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      this.compactSplitThread.join();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    if (this.executorService != null) this.executorService.shutdown();<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        this.replicationSourceHandler == this.replicationSinkHandler) {<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>    } else {<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      if (this.replicationSourceHandler != null) {<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>      }<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      if (this.replicationSinkHandler != null) {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>      }<a name="line.2641"></a>
+<span class="sourceLineNo">2568</span>  /**<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>   */<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>  public void abort(String reason) {<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    abort(reason, null);<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>  }<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span><a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>  @Override<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>  public boolean isAborted() {<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>    return abortRequested.get();<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>  }<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span><a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>  /*<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>   * hostname+port immediately.<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>   */<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>  @VisibleForTesting<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>  protected void kill() {<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    this.killed = true;<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    abort("Simulated kill");<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>  }<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span><a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>  // Limits the time spent in the shutdown process.<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>  private void scheduleAbortTimer() {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>    if (this.abortMonitor == null) {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>      TimerTask abortTimeoutTask = null;<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      try {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>        timerTaskCtor.setAccessible(true);<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>      } catch (Exception e) {<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>      }<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>      if (abortTimeoutTask != null) {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>      }<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>    }<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>  }<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span><a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>  /**<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>   * have already been called.<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>   */<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>  protected void stopServiceThreads() {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>    // clean up the scheduled chores<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    if (this.choreService != null) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>      choreService.cancelChore(compactionChecker);<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      choreService.cancelChore(periodicFlusher);<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>      choreService.cancelChore(healthCheckChore);<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>      choreService.cancelChore(executorStatusChore);<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>      choreService.cancelChore(storefileRefresher);<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>      choreService.shutdown();<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>    }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>    if (this.cacheFlusher != null) {<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>      this.cacheFlusher.join();<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    }<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span><a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>    if (this.spanReceiverHost != null) {<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>      this.spanReceiverHost.closeReceivers();<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>    }<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>    if (this.walRoller != null) {<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>      this.walRoller.close();<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    }<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    if (this.compactSplitThread != null) {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>      this.compactSplitThread.join();<a name="line.2641"></a>
 <span class="sourceLineNo">2642</span>    }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span><a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>  /**<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>   * @return Return the object that implements the replication<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>   * source executorService.<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>   */<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>  @Override<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    return replicationSourceHandler;<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>  }<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span><a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>  /**<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>   */<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    return replicationSinkHandler;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>  }<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span><a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>  /**<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>   * Method will block until a master is available. You can break from this<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>   * block by requesting the server stop.<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>   *<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>   * @return master + port, or null if server has been stopped<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>   */<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    return createRegionServerStatusStub(false);<a name="line.2671"></a>
+<span class="sourceLineNo">2643</span>    if (this.executorService != null) {<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      this.executorService.shutdown();<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    }<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    } else {<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>      if (this.replicationSourceHandler != null) {<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>      }<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>      if (this.replicationSinkHandler != null) {<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>      }<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>    }<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  }<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>  /**<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>   * @return Return the object that implements the replication<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>   * source executorService.<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>   */<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>  @Override<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    return replicationSourceHandler;<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>  }<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span><a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>  /**<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>   */<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    return replicationSinkHandler;<a name="line.2671"></a>
 <span class="sourceLineNo">2672</span>  }<a name="line.2672"></a>
 <span class="sourceLineNo">2673</span><a name="line.2673"></a>
 <span class="sourceLineNo">2674</span>  /**<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   * You can break from this block by requesting the server stop.<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   * @return master + port, or null if server has been stopped<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>  @VisibleForTesting<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (rssStub != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      return masterAddressTracker.getMasterAddress();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    ServerName sn = null;<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>    long previousLogTime = 0;<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>    boolean interrupted = false;<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>    try {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      while (keepLooping()) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>        if (sn == null) {<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>          if (!keepLooping()) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>            // give up with no connection.<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>            return null;<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>          }<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>            LOG.debug("No master found; retry");<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>            previousLogTime = System.currentTimeMillis();<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>          }<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>          if (sleepInterrupted(200)) {<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>            interrupted = true;<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>          }<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>          continue;<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        }<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span><a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>        // If we are on the active master, use the shortcut<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>          break;<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>        }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        try {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>          BlockingRpcChannel channel =<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>              shortOperationTimeout);<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          break;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        } catch (IOException e) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            e = e instanceof RemoteException ?<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>            } else {<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>            }<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>            previousLogTime = System.currentTimeMillis();<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          }<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          if (sleepInterrupted(200)) {<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>            interrupted = true;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>          }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>        }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      }<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>      if (interrupted) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        Thread.currentThread().interrupt();<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    }<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    this.rssStub = intRssStub;<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>    this.lockStub = intLockStub;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    return sn;<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>  }<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span><a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>  /**<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>   * @return True if we should break loop because cluster is going down or<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>   */<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>  private boolean keepLooping() {<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  /*<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>   * us by the master.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * null if we failed to register.<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @throws IOException<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>    if (masterServerName == null || rss == null) return null;<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    RegionServerStartupResponse result = null;<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>    try {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>      rpcServices.requestCount.reset();<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      int port = rpcServices.isa.getPort();<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      }<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>      request.setPort(port);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      request.setServerStartCode(this.startcode);<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      request.setServerCurrentTime(now);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    } catch (ServiceException se) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>            ioe);<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        // Re-throw IOE will cause RS to abort<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>        throw ioe;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        LOG.debug("Master is not running yet");<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>      } else {<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>        LOG.warn("error telling master we are up", se);<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>      }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      rssStub = null;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>    }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    return result;<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>  @Override<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>    try {<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      if (rss == null) { // Try to connect one more time<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>        createRegionServerStatusStub();<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>        rss = rssStub;<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>        if (rss == null) {<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>          // Still no luck, we tried<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>              .build();<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>        }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    } catch (ServiceException e) {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>          .build();<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>  }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span><a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>  /**<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>   * Close meta region if we carry it<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>   * @param abort Whether we're running an abort.<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>   */<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    HRegion meta = null;<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>    try {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>        if (hri.isMetaRegion()) {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>          meta = e.getValue();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>        }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>        if (meta != null) break;<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>      }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    } finally {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>  }<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span><a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>  /**<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   * Schedule closes on all user regions.<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>   * that are already closed or that are closing.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>   * @param abort Whether we're running an abort.<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>   */<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>  private void closeUserRegions(final boolean abort) {<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>    try {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        HRegion r = e.getValue();<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>          // Don't update zk with this close transition; pass false.<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>        }<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>      }<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>    } finally {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  /** @return the info server */<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public InfoServer getInfoServer() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return infoServer;<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * @return true if a stop has been requested.<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   */<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>  @Override<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>  public boolean isStopped() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>    return this.stopped;<a name="line.2887"></a>
+<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>   * Method will block until a master is available. You can break from this<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   * block by requesting the server stop.<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   *<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   * @return master + port, or null if server has been stopped<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   */<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>    return createRegionServerStatusStub(false);<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span><a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>  /**<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>   * You can break from this block by requesting the server stop.<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>   * @return master + port, or null if server has been stopped<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  @VisibleForTesting<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    if (rssStub != null) {<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      return masterAddressTracker.getMasterAddress();<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>    ServerName sn = null;<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    long previousLogTime = 0;<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    boolean interrupted = false;<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>    try {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>      while (keepLooping()) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>        if (sn == null) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>          if (!keepLooping()) {<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>            // give up with no connection.<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>            return null;<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>          }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>            LOG.debug("No master found; retry");<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>            previousLogTime = System.currentTimeMillis();<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>          }<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>          if (sleepInterrupted(200)) {<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            interrupted = true;<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>          }<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>          continue;<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>        }<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>        // If we are on the active master, use the shortcut<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          break;<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>        }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>        try {<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          BlockingRpcChannel channel =<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>              shortOperationTimeout);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>          break;<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>        } catch (IOException e) {<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>            e = e instanceof RemoteException ?<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>            } else {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>            }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>            previousLogTime = System.currentTimeMillis();<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>          }<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (sleepInterrupted(200)) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            interrupted = true;<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>        }<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>      }<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>    } finally {<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>      if (interrupted) {<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        Thread.currentThread().interrupt();<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    this.rssStub = intRssStub;<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>    this.lockStub = intLockStub;<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    return sn;<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>  }<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span><a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>  /**<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>   * @return True if we should break loop because cluster is going down or<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>   */<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  private boolean keepLooping() {<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>  }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span><a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  /*<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>   * us by the master.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>   * null if we failed to register.<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>   * @throws IOException<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>   */<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>    if (masterServerName == null || rss == null) return null;<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    RegionServerStartupResponse result = null;<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    try {<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>      rpcServices.requestCount.reset();<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      int port = rpcServices.isa.getPort();<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>      }<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      request.setPort(port);<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>      request.setServerStartCode(this.startcode);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>      request.setServerCurrentTime(now);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>    } catch (ServiceException se) {<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>            ioe);<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>        // Re-throw IOE will cause RS to abort<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>        throw ioe;<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>        LOG.debug("Master is not running yet");<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      } else {<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>        LOG.warn("error telling master we are up", se);<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      }<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>      rssStub = null;<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>    }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    return result;<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>    try {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>      if (rss == null) { // Try to connect one more time<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>        createRegionServerStatusStub();<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>        rss = rssStub;<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>        if (rss == null) {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>          // Still no luck, we tried<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>              .build();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>        }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      }<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>    } catch (ServiceException e) {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>          .build();<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    }<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span><a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>   * Close meta region if we carry it<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>   * @param abort Whether we're running an abort.<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>   */<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>    HRegion meta = null;<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>    try {<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>        if (hri.isMetaRegion()) {<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>          meta = e.getValue();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>        if (meta != null) break;<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      }<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    } finally {<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    }<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>  }<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span><a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>  /**<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   * Schedule closes on all user regions.<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>   * that are already closed or that are closing.<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>   * @param abort Whether we're running an abort.<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>   */<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  private void closeUserRegions(final boolean abort) {<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>    try {<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>        HRegion r = e.getValue();<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>          // Don't update zk with this close transition; pass false.<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>        }<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    } finally {<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>    }<a name="line.2887"></a>
 <span class="sourceLineNo">2888</span>  }<a name="line.2888"></a>
 <span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>  @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  public boolean isStopping() {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>    return this.stopping;<a name="line.2892"></a>
+<span class="sourceLineNo">2890</span>  /** @return the info server */<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>  public InfoServer getInfoServer() {<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>    return infoServer;<a name="line.2892"></a>
 <span class="sourceLineNo">2893</span>  }<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>  @Override<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public Configuration getConfiguration() {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    return conf;<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>  }<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span><a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    return this.onlineRegions;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>  public int getNumberOfOnlineRegions() {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    return this.onlineRegions.size();<a name="line.2905"></a>
+<span class="sourceLineNo">2895</span>  /**<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>   * @return true if a stop has been requested.<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>   */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>  @Override<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>  public boolean isStopped() {<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    return this.stopped;<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>  }<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span><a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>  @Override<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>  public boolean isStopping() {<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    return this.stopping;<a name="line.2905"></a>
 <span class="sourceLineNo">2906</span>  }<a name="line.2906"></a>
 <span class="sourceLineNo">2907</span><a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  /**<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>   * For tests, web ui and metrics.<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>   */<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    return Collections.unmodifiableCollection(regions);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  }<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span><a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>  @Override<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>  public void addRegion(HRegion region) {<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>    configurationManager.registerObserver(region);<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  }<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span><a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>      long size) {<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    }<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    sortedRegions.get(size).add(region);<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  /**<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>   *   the biggest.<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    // we'll sort the regions in reverse<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2940"></a>
+<span class="sourceLineNo">2908</span>  @Override<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  public Configuration getConfiguration() {<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    return conf;<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  }<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span><a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>    return this.onlineRegions;<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>  }<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span><a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>  public int getNumberOfOnlineRegions() {<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    return this.onlineRegions.size();<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>  }<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span><a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>  /**<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>   * For tests, web ui and metrics.<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>    return Collections.unmodifiableCollection(regions);<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>  }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span><a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  @Override<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>  public void addRegion(HRegion region) {<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    configurationManager.registerObserver(region);<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  }<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>      long size) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2940"></a>
 <span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>    return sortedRegions;<a name="line.2942"></a>
+<span class="sourceLineNo">2942</span>    sortedRegions.get(size).add(region);<a name="line.2942"></a>
 <span class="sourceLineNo">2943</span>  }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>  /**<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>   *   biggest.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    // we'll sort the regions in reverse<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>    }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>    return sortedRegions;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>  }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span><a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  /**<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>   * @return time stamp in millis of when this region server was started<a name="line.2960"></a>
+<span class="sourceLineNo">2944</span>  /**<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>   *   the biggest.<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   */<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    // we'll sort the regions in reverse<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>    }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>    return sortedRegions;<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>  }<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span><a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  /**<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>   *   biggest.<a name="line.2960"></a>
 <span class="sourceLineNo">2961</span>   */<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>  public long getStartcode() {<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>    return this.startcode;<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>  }<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span><a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>  /** @return reference to FlushRequester */<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>  @Override<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>  public FlushRequester getFlushRequester() {<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    return this.cacheFlusher;<a name="line.2969"></a>
+<span class="sourceLineNo">2962</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>    // we'll sort the regions in reverse<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>    }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>    return sortedRegions;<a name="line.2969"></a>
 <span class="sourceLineNo">2970</span>  }<a name="line.2970"></a>
 <span class="sourceLineNo">2971</span><a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>  @Override<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    return this.compactSplitThread;<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>  }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span><a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  @Override<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  public LeaseManager getLeaseManager() {<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    return leaseManager;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>  /**<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @return Return the rootDir.<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   */<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>  protected Path getDataRootDir() {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>    return dataRootDir;<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  }<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span><a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>  @Override<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  public FileSystem getFileSystem() {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    return dataFs;<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span><a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  /**<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   */<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>  boolean isDataFileSystemOk() {<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>    return this.dataFsOk;<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>  }<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span><a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>  /**<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   * @return Return the walRootDir.<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>   */<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>  public Path getWALRootDir() {<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    return walRootDir;<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>  }<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span><a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>  /**<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>   * @return Return the walFs.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>   */<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  public FileSystem getWALFileSystem() {<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>    return walFs;<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>  }<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span><a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>  @Override<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>  public String toString() {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>    return getServerName().toString();<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>  }<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>  @Override<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>  public ZKWatcher getZooKeeper() {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    return zooKeeper;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span><a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  @Override<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>    return csm;<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>  }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span><a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>  @Override<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>  public ServerName getServerName() {<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>    return serverName;<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span><a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>    return this.rsHost;<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  }<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span><a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  @Override<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    return this.regionsInTransitionInRS;<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>  }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span><a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>  @Override<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>  public ExecutorService getExecutorService() {<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>    return executorService;<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span><a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  @Override<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>  public ChoreService getChoreService() {<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>    return choreService;<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>  }<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span><a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>  @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return rsQuotaManager;<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>  }<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span><a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>  //<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>  // Main program and support routines<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  //<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>   * Load the replication executorService objects, if any<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>    // read in the name of the source replication class from the config file.<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span><a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>    // read in the name of the sink replication class from the config file.<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>    // only one object.<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>    } else {<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>    }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>  }<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span><a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      throw new IOException("Could not find class for " + classname);<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    }<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    return service;<a name="line.3101"></a>
+<span class="sourceLineNo">2972</span>  /**<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   * @return time stamp in millis of when this region server was started<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   */<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  public long getStartcode() {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>    return this.startcode;<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>  }<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span><a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>  /** @return reference to FlushRequester */<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>  @Override<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>  public FlushRequester getFlushRequester() {<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return this.cacheFlusher;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  @Override<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>    return this.compactSplitThread;<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>  }<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span><a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>  @Override<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>  public LeaseManager getLeaseManager() {<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    return leaseManager;<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * @return Return the rootDir.<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   */<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  protected Path getDataRootDir() {<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    return dataRootDir;<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>  }<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span><a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  @Override<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  public FileSystem getFileSystem() {<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>    return dataFs;<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  }<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span><a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>  /**<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   */<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  boolean isDataFileSystemOk() {<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    return this.dataFsOk;<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span><a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>   * @return Return the walRootDir.<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>   */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  public Path getWALRootDir() {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    return walRootDir;<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  }<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>  /**<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * @return Return the walFs.<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>  public FileSystem getWALFileSystem() {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    return walFs;<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>  }<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span><a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>  @Override<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  public String toString() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    return getServerName().toString();<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>  }<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span><a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>  @Override<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>  public ZKWatcher getZooKeeper() {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    return zooKeeper;<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span><a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>    return csm;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>  }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public ServerName getServerName() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    return serverName;<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    return this.rsHost;<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>  }<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span><a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>  @Override<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    return this.regionsInTransitionInRS;<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>  }<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span><a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  @Override<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public ExecutorService getExecutorService() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    return executorService;<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  }<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  @Override<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>  public ChoreService getChoreService() {<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    return choreService;<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  }<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span><a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>  @Override<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>    return rsQuotaManager;<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  }<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span><a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>  //<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>  // Main program and support routines<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  //<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>  /**<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   * Load the replication executorService objects, if any<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>   */<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>    // read in the name of the source replication class from the config file.<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span><a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    // read in the name of the sink replication class from the config file.<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span><a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    // only one object.<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>      server.sameReplicationSourceAndSink = true;<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>    } else {<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>      server.sameReplicationSourceAndSink = false;<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
 <span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
 <span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>    if(!this.isOnline()){<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>      return walGroupsReplicationStatus;<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>    }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>    }<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    return walGroupsReplicationStatus;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>  }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>  /**<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   */<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>  static HRegionServer constructRegionServer(<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      final Configuration conf<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>  ) {<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    try {<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      return c.newInstance(conf);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>    } catch (Exception e) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>          + regionServerClass.toString(), e);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>    }<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>  }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span><a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>  /**<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>   */<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>  public static void main(String[] args) {<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>    VersionInfo.logVersion();<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    @SuppressWarnings("unchecked")<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  }<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span><a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>  /**<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>   * Gets the online regions of the specified table.<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>   * all the ONLINE regions in the table.<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>   * @param tableName table to limit the scope of the query<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>   */<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>  @Override<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>     synchronized (this.onlineRegions) {<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>           tableRegions.add(region);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>         }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>       }<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>     }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>     return tableRegions;<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>   }<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span><a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>  @Override<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    List&lt;HRegion&gt; allRegions;<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>    synchronized (this.onlineRegions) {<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>      // Return a clone copy of the onlineRegions<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    }<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>    return allRegions;<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>  }<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span><a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>  /**<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   * Gets the online tables in this RS.<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * This method looks at the in-memory onlineRegions.<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return all the online tables in this RS<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   */<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    synchronized (this.onlineRegions) {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      }<a name="line.3193"></a>
+<span class="sourceLineNo">3104</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>    try {<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>      throw new IOException("Could not find class for " + classname);<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>    }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    return service;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>  }<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span><a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    if(!this.isOnline()){<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      return walGroupsReplicationStatus;<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>    }<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    }<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    return walGroupsReplicationStatus;<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>  }<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span><a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>  /**<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>   */<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>  static HRegionServer constructRegionServer(<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      final Configuration conf<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>  ) {<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>    try {<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>      return c.newInstance(conf);<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    } catch (Exception e) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          + regionServerClass.toString(), e);<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span><a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>  /**<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>   */<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>  public static void main(String[] args) {<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    VersionInfo.logVersion();<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>    @SuppressWarnings("unchecked")<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span><a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>  }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>  /**<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>   * Gets the online regions of the specified table.<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>   * all the ONLINE regions in the table.<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>   * @param tableName table to limit the scope of the query<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>   */<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>  @Override<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>     synchronized (this.onlineRegions) {<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>           tableRegions.add(region);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>         }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>       }<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>     }<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>     return tableRegions;<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>   }<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span><a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>  @Override<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    List&lt;HRegion&gt; allRegions;<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>    synchronized (this.onlineRegions) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>      // Return a clone copy of the onlineRegions<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3193"></a>
 <span class="sourceLineNo">3194</span>    }<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    return tables;<a name="line.3195"></a>
+<span class="sourceLineNo">3195</span>    return allRegions;<a name="line.3195"></a>
 <span class="sourceLineNo">3196</span>  }<a name="line.3196"></a>
 <span class="sourceLineNo">3197</span><a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>  public String[] getRegionServerCoprocessors() {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    try {<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>    } catch (IOException exception) {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>          "skipping.");<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>    }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    for (HRegion region: regions) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>      try {<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      } catch (IOException exception) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>            "; skipping.");<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>      }<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>    }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>    return coprocessors.toArray(new String[0]);<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>  }<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span><a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>  /**<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>   * @param region Region to close<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>   */<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>    try {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>            " - ignoring and continuing");<a name="line.3230"></a>
+<span class="sourceLineNo">3198</span>  /**<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>   * Gets the online tables in this RS.<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>   * This method looks at the in-memory onlineRegions.<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>   * @return all the online tables in this RS<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>   */<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>    synchronized (this.onlineRegions) {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      }<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>    }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>    return tables;<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>  }<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span><a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>  public String[] getRegionServerCoprocessors() {<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>    try {<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>    } catch (IOException exception) {<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>          "skipping.");<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>    }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    for (HRegion region: regions) {<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>      try {<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span>      } catch (IOException exception) {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>            "; skipping.");<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3230"></a>
 <span class="sourceLineNo">3231</span>      }<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    } catch (IOException e) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>          " - ignoring and continuing", e);<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    }<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  /**<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>   *<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>   * &lt;p&gt;<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>   * &lt;/p&gt;<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span><a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>   * &lt;p&gt;<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>   * &lt;/p&gt;<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>   *<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>   * @param encodedName Region to close<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>   * @param abort True if we are aborting<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>   * @return True if closed a region.<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>   * @throws NotServingRegionException if the region is not online<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>   */<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>        final ServerName destination)<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>      throws NotServingRegionException {<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>    //Check for permissions to close.<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>    // Can be null if we're calling close on a region that's not online<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>      try {<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>      } catch (IOException exp) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>        return false;<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>      }<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    }<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span><a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>    // previous can come back 'null' if not in map.<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>        Boolean.FALSE);<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span><a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>        // We're going to try to do a standard close then.<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>            " Doing a standard close now");<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>        return closeRegion(encodedName, abort, destination);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>      }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>      // Let's get the region from the online region list again<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>      actualRegion = this.getRegion(encodedName);<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>        // The master deletes the znode when it receives this exception.<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>      }<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>    } else if (previous == null) {<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      return true;<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>    }<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span><a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>    if (actualRegion == null) {<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>      // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>          " is not online, and is not opening.");<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>    }<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span><a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>    CloseRegionHandler crh;<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>    if (hri.isMetaRegion()) {<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>    } else {<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>    }<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>    this.executorService.submit(crh);<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    return true;<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span><a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>   /**<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>   *         named region is not member of the online regions.<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>   */<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>  }<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span><a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>  @Override<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>  }<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span><a name="line.3334"></a>
+<span class="sourceLineNo">3232</span>    }<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>    return coprocessors.toArray(new String[0]);<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>  }<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span><a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>  /**<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>   * @param region Region to close<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>   */<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    try {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>            " - ignoring and continuing");<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>      }<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>    } catch (IOException e) {<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>          " - ignoring and continuing", e);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>    }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>  }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span><a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>  /**<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>   *<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>   * &lt;p&gt;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>   * &lt;/p&gt;<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span><a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * &lt;p&gt;<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>   * &lt;/p&gt;<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>   *<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * @param encodedName Region to close<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * @param abort True if we are aborting<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>   * @return True if closed a region.<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>   * @throws NotServingRegionException if the region is not online<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>   */<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>        final ServerName destination)<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>      throws NotServingRegionException {<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>    //Check for permissions to close.<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>    // Can be null if we're calling close on a region that's not online<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>      try {<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>      } catch (IOException exp) {<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>        return false;<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>      }<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    }<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span><a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>    // previous can come back 'null' if not in map.<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>        Boolean.FALSE);<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span><a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>        // We're going to try to do a standard close then.<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>            " Doing a standard close now");<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>        return closeRegion(encodedName, abort, destination);<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>      }<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>      // Let's get the region from the online region list again<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>      actualRegion = this.getRegion(encodedName);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>        // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>      }<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    } else if (previous == null) {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>      return true;<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>    }<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span><a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>    if (actualRegion == null) {<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>      // The master deletes the znode when it receives this exception.<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>          " is not online, and is not opening.");<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>    }<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span><a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>    CloseRegionHandler crh;<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>    if (hri.isMetaRegion()) {<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>    } else {<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    }<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    this.executorService.submit(crh);<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>    return true;<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>  }<a name="line.3334"></a>
 <span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>  @Override<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>    if (destination != null) {<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>      }<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>      if (selfMove) {<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>      }<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    }<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>    configurationManager.deregisterObserver(r);<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>    return toReturn != null;<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>  }<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span><a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>  /**<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>   *<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>   */<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      throws NotServingRegionException {<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  }<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span><a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>      throws NotServingRegionException {<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>  }<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span><a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>    throws NotServingRegionException {<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>    if (region == null) {<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>      if (moveInfo != null) {<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>      }<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>      String regionNameStr = regionName == null?<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>          " is opening on " + this.serverName);<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>      }<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>        " is not online on " + this.serverName);<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>    }<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return region;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  /**<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>   * IOE if it isn't already.<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>   *<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>   * @param t Throwable<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>   * @param msg Message to log in error. Can be null.<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>   */<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>    if (t instanceof NotServingRegionException) {<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>      return t;<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>    }<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>    if (msg == null) {<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>      LOG.error("", e);<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>    } else {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>      LOG.error(msg, e);<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    }<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      checkFileSystem();<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>    }<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>    return t;<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>  }<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span><a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  /**<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>   */<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>  }<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span><a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>  /**<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * abortRequested and stopRequested<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   *<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @return false if file system is not available<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   */<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>  boolean checkFileSystem() {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>      try {<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>      } catch (IOException e) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>        abort("File System not available", e);<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>        this.dataFsOk = false;<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      }<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>    }<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>    return this.dataFsOk;<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>  }<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span><a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>  @Override<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>          favoredNodes.get(i).getPort());<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>  }<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span><a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>  /**<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>   *<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>   * @return array of favored locations<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>   */<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>  @Override<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span><a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  @Override<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>  public ServerNonceManager getNonceManager() {<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>    return this.nonceManager;<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>  }<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span><a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  private static class MovedRegionInfo {<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>    private final ServerName serverName;<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>    private final long seqNum;<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span><a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>      this.serverName = serverName;<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>      this.seqNum = closeSeqNum;<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>     }<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span><a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>    public ServerName getServerName() {<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>      return serverName;<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>    }<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span><a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>    public long getSeqNum() {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      return seqNum;<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>    }<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>  }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span><a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>  /**<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>   * the number of network calls instead of reducing them.<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>   */<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3501"></a>
+<span class="sourceLineNo">3336</span>   /**<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>   *         named region is not member of the online regions.<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>   */<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>  }<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span><a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>  @Override<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>  }<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span><a name="line.3349"></a>
+<span class="sourceLineNo">3350</span><a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>  @Override<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    if (destination != null) {<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      }<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>      if (selfMove) {<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>    }<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>    configurationManager.deregisterObserver(r);<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>    return toReturn != null;<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>  }<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span><a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>  /**<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   *<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   */<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>      throws NotServingRegionException {<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  }<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span><a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      throws NotServingRegionException {<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>  }<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span><a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>    throws NotServingRegionException {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    if (region == null) {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>      if (moveInfo != null) {<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>      }<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>      String regionNameStr = regionName == null?<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>          " is opening on " + this.serverName);<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>      }<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>        " is not online on " + this.serverName);<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>    }<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>    return region;<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>  }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span><a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>  /**<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>   * IOE if it isn't already.<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>   *<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>   * @param t Throwable<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>   * @param msg Message to log in error. Can be null.<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>   */<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    if (t instanceof NotServingRegionException) {<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>      return t;<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>    }<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>    if (msg == null) {<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>      LOG.error("", e);<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>    } else {<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>      LOG.error(msg, e);<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>    }<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>      checkFileSystem();<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>    }<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>    return t;<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>  }<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span><a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>  /**<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   */<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>  }<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span><a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>  /**<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>   * abortRequested and stopRequested<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>   *<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>   * @return false if file system is not available<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>   */<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>  boolean checkFileSystem() {<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>      try {<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      } catch (IOException e) {<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>        abort("File System not available", e);<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>        this.dataFsOk = false;<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>      }<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>    }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>    return this.dataFsOk;<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>  }<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span><a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>  @Override<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>          favoredNodes.get(i).getPort());<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    }<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>  }<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span><a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>  /**<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   *<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   * @return array of favored locations<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>   */<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>  @Override<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>  }<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span><a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>  @Override<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>  public ServerNonceManager getNonceManager() {<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>    return this.nonceManager;<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>  }<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span><a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>  private static class MovedRegionInfo {<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>    private final ServerName serverName;<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    private final long seqNum;<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span><a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>      this.serverName = serverName;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>      this.seqNum = closeSeqNum;<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>     }<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span><a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>    if (selfMove) {<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>      return;<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>    }<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>        closeSeqNum);<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span><a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>  }<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span><a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>  @VisibleForTesting<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>  }<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span><a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>  @VisibleForTesting<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>  public int movedRegionCacheExpiredTime() {<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>        return TIMEOUT_REGION_MOVED;<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>  }<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span><a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>  private String getMyEphemeralNodePath() {<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>  }<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span><a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>  private boolean isHealthCheckerConfigured() {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>  }<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span><a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>  /**<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>   */<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>  public CompactSplit getCompactSplitThread() {<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>    return this.compactSplitThread;<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>  }<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span><a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>    try {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>      String serviceName = call.getServiceName();<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>      if (service == null) {<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>            serviceName);<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>      }<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>      ServiceDescriptor serviceDesc =<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>          service.getDescriptorForType();<a name="line.3556"></a>
+<span class="sourceLineNo">3503</span>    public ServerName getServerName() {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>      return serverName;<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>    }<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span><a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>    public long getSeqNum() {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>      return seqNum;<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>    }<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span><a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>   * the number of network calls instead of reducing them.<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span><a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>    if (selfMove) {<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>      return;<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>    }<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>        closeSeqNum);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>  }<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span><a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>  }<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span><a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  @VisibleForTesting<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>  }<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span><a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>  @VisibleForTesting<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>  public int movedRegionCacheExpiredTime() {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        return TIMEOUT_REGION_MOVED;<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>  }<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  private String getMyEphemeralNodePath() {<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>  }<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span><a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>  private boolean isHealthCheckerConfigured() {<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>  }<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span><a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>  /**<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>   */<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>  public CompactSplit getCompactSplitThread() {<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>    return this.compactSplitThread;<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>  }<a name="line.3556"></a>
 <span class="sourceLineNo">3557</span><a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>      String methodName = call.getMethodName();<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>      MethodDescriptor methodDesc =<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>          serviceDesc.findMethodByName(methodName);<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>      if (methodDesc == null) {<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>            " called on executorService " + serviceName);<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>      }<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span><a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>      Message request =<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>      final Message.Builder responseBuilder =<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>        if (message != null) {<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>          responseBuilder.mergeFrom(message);<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>        }<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      });<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>      if (exception != null) {<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>        throw exception;<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>      }<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>    } catch (IOException ie) {<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>      throw new ServiceException(ie);<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>    }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>  }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span><a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>  /**<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>   * May be null if this is a master which not carry table.<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>   *<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>   * @return The block cache instance used by the regionserver.<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>   */<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>  @Override<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>    return Optional.ofNullable(this.blockCache);<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>  }<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span><a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>  /**<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>   * May be null if this is a master which not carry table.<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>   *<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>   * @return The cache for mob files used by the regionserver.<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>   */<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>  @Override<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>  }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span><a name="line.3604"></a>
+<span class="sourceLineNo">3558</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>    try {<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>      String serviceName = call.getServiceName();<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>      if (service == null) {<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>            serviceName);<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>      }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>      ServiceDescriptor serviceDesc =<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>          service.getDescriptorForType();<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span><a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>      String methodName = call.getMethodName();<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>      MethodDescriptor methodDesc =<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>          serviceDesc.findMethodByName(methodName);<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>      if (methodDesc == null) {<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>            " called on executorService " + serviceName);<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>      }<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span><a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>      Message request =<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>      final Message.Builder responseBuilder =<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>        if (message != null) {<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>          responseBuilder.mergeFrom(message);<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>        }<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      });<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      if (exception != null) {<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>        throw exception;<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>      }<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>    } catch (IOException ie) {<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>      throw new ServiceException(ie);<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>    }<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  }<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span><a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>  /**<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>   * May be null if this is a master which not carry table.<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>   *<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>   * @return The block cache instance used by the regionserver.<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>   */<a name="line.3604"></a>
 <span class="sourceLineNo">3605</span>  @Override<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>  public AccessChecker getAccessChecker() {<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>    return rpcServices.getAccessChecker();<a name="line.3607"></a>
+<span class="sourceLineNo">3606</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>    return Optional.ofNullable(this.blockCache);<a name="line.3607"></a>
 <span class="sourceLineNo">3608</span>  }<a name="line.3608"></a>
 <span class="sourceLineNo">3609</span><a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>  @Override<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>  }<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span><a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>  /**<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>   */<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>  @VisibleForTesting<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>  ConfigurationManager getConfigurationManager() {<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    return configurationManager;<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>  }<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span><a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>  /**<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>   * @return Return table descriptors implementation.<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>   */<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>  @Override<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>  public TableDescriptors getTableDescriptors() {<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    return this.tableDescriptors;<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>  }<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span><a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  /**<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>   * Reload the configuration from disk.<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>   */<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>  void updateConfiguration() {<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>    // Reload the configuration from disk.<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>    conf.reloadConfiguration();<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>    configurationManager.notifyAllObservers(conf);<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>  }<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span><a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>    long evictedBlocks = 0;<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span><a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>    for(Store store : region.getStores()) {<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>      }<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>    }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span><a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>    return CacheEvictionStats.builder()<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>        .build();<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>  }<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span><a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>  @Override<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>  public double getCompactionPressure() {<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>    double max = 0;<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    for (Region region : onlineRegions.values()) {<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>      for (Store store : region.getStores()) {<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>        double normCount = store.getCompactionPressure();<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>        if (normCount &gt; max) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>          max = normCount;<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>        }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>      }<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>    }<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>    return max;<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>  }<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span><a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>  @Override<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>    return hMemManager;<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>  }<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span><a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    return cacheFlusher;<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span><a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>  /**<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>   * For testing<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>   */<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>  @VisibleForTesting<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>  public boolean walRollRequestFinished() {<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    return this.walRoller.walRollFinished();<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>  }<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span><a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>  @Override<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>  public ThroughputController getFlushThroughputController() {<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>    return flushThroughputController;<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  }<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span><a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>  @Override<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>  public double getFlushPressure() {<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>      // return 0 during RS initialization<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>      return 0.0;<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    }<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span>  }<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span><a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>  @Override<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>    ThroughputController old = this.flushThroughputController;<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>    if (old != null) {<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>      old.stop("configuration change");<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>    }<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>    try {<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      Superusers.initialize(newConf);<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>    } catch (IOException e) {<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3711"></a>
+<span class="sourceLineNo">3610</span>  /**<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>   * May be null if this is a master which not carry table.<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>   *<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>   * @return The cache for mob files used by the regionserver.<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>   */<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>  @Override<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>  }<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span><a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>  @Override<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>  public AccessChecker getAccessChecker() {<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    return rpcServices.getAccessChecker();<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>  }<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span><a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>  @Override<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>  }<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span><a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>  /**<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>   */<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>  @VisibleForTesting<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  ConfigurationManager getConfigurationManager() {<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>    return configurationManager;<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>  }<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span><a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>  /**<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>   * @return Return table descriptors implementation.<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>   */<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>  @Override<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>  public TableDescriptors getTableDescriptors() {<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    return this.tableDescriptors;<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>  }<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span><a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>  /**<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>   * Reload the configuration from disk.<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>   */<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>  void updateConfiguration() {<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>    // Reload the configuration from disk.<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>    conf.reloadConfiguration();<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>    configurationManager.notifyAllObservers(conf);<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>  }<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span><a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>    long evictedBlocks = 0;<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span><a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    for(Store store : region.getStores()) {<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>      }<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    }<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span><a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>    return CacheEvictionStats.builder()<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>        .build();<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>  }<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span><a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>  @Override<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>  public double getCompactionPressure() {<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>    double max = 0;<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>    for (Region region : onlineRegions.values()) {<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>      for (Store store : region.getStores()) {<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        double normCount = store.getCompactionPressure();<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>        if (normCount &gt; max) {<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span>          max = normCount;<a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>        }<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      }<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>    return max;<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>  }<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span><a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>  @Override<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>    return hMemManager;<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>  }<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span><a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    return cacheFlusher;<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  /**<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>   * For testing<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>   */<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>  @VisibleForTesting<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>  public boolean walRollRequestFinished() {<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>    return this.walRoller.walRollFinished();<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>  }<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span><a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>  @Override<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>  public ThroughputController getFlushThroughputController() {<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>    return flushThroughputController;<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span><a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>  @Override<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  public double getFlushPressure() {<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>      // return 0 during RS initialization<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      return 0.0;<a name="line.3711"></a>
 <span class="sourceLineNo">3712</span>    }<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>  }<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span><a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>  @Override<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>  public MetricsRegionServer getMetrics() {<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>    return metricsRegionServer;<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>  }<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span><a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>  @Override<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>    return this.secureBulkLoadManager;<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>  }<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span><a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>  @Override<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      final Abortable abort) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>    final LockServiceClient client =<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>  }<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span><a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>  @Override<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>  }<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span><a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>  @Override<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>    return this.rsSpaceQuotaManager;<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>  }<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span><a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>  @Override<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>      // the current server could be stopping.<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>      return false;<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>    }<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>    try {<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>      rss.reportFileArchival(null, request);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>    } catch (ServiceException se) {<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>        if (LOG.isTraceEnabled()) {<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>              + " This will be retried.", ioe);<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>        }<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>        return false;<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>      }<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>      if (rssStub == rss) {<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>        rssStub = null;<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>      }<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>      // re-create the stub if we failed to report the archival<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>      createRegionServerStatusStub(true);<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>      return false;<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>    }<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>    return true;<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>  }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>    return eventLoopGroupConfig;<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>  }<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span><a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>  @Override<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>  }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span><a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>  }<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span><a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>    procedureResultReporter.complete(procId, error);<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>  }<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span><a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>    for (;;) {<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>      rss = rssStub;<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>      if (rss != null) {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>        break;<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>      }<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>      createRegionServerStatusStub();<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>    }<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>    try {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>      rss.reportProcedureDone(null, request);<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>    } catch (ServiceException se) {<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>      if (rssStub == rss) {<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>        rssStub = null;<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>      }<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>    }<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>  }<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span><a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>  /**<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>   *<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>   *<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>   *<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>   * See HBASE-22404 for more details.<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>   *<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>   * @param procId the id of the open/close region procedure<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>   * @return true if the procedure can be submitted.<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>   */<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>  boolean submitRegionProcedure(long procId) {<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>    if (procId == -1) {<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      return true;<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>    }<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>    // Ignore the region procedures which already submitted.<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>    if (previous != null) {<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>      return false;<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>    }<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>    // Ignore the region procedures which already executed.<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>      return false;<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>    }<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>    return true;<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>  }<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span><a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>  /**<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>   * @param procId the id of the open/close region procedure<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>   */<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span>  public void finishRegionProcedure(long procId) {<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>    executedRegionProcedures.put(procId, procId);<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>    submittedRegionProcedures.remove(procId);<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>  }<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span><a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>  public boolean isShutDown() {<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>    return shutDown;<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>  }<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span><a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>  /**<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>   * Force to terminate region server when abort timeout.<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>   */<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span><a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>    public SystemExitWhenAbortTimeout() {<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>    }<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span><a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>    @Override<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>    public void run() {<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>          " Thread dump to stdout.");<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>      Runtime.getRuntime().halt(1);<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>    }<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>  }<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span><a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>  @Override<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>    return asyncClusterConnection;<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>  }<a name="line.3885"></a>
+<span class="sourceLineNo">3713</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  }<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span><a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    ThroughputController old = this.flushThroughputController;<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>    if (old != null) {<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>      old.stop("configuration change");<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>    }<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    try {<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>      Superusers.initialize(newConf);<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    } catch (IOException e) {<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    }<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>  }<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span><a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>  @Override<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>  public MetricsRegionServer getMetrics() {<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span>    return metricsRegionServer;<a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>  }<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span><a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>  @Override<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>    return this.secureBulkLoadManager;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>  }<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span><a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>  @Override<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>      final Abortable abort) {<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>    final LockServiceClient client =<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>  }<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span><a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>  @Override<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>  }<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span><a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>  @Override<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>    return this.rsSpaceQuotaManager;<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>  }<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span><a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>  @Override<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>      // the current server could be stopping.<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>      return false;<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>    }<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>    try {<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>      rss.reportFileArchival(null, request);<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>    } catch (ServiceException se) {<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        if (LOG.isTraceEnabled()) {<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>              + " This will be retried.", ioe);<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>        }<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>        return false;<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>      if (rssStub == rss) {<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>        rssStub = null;<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      }<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>      // re-create the stub if we failed to report the archival<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>      createRegionServerStatusStub(true);<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>      return false;<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    }<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>    return true;<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span><a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>    return eventLoopGroupConfig;<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>  }<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span><a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  @Override<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>  }<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span><a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>  }<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span><a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>    procedureResultReporter.complete(procId, error);<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>  }<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span><a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>    for (;;) {<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>      rss = rssStub;<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      if (rss != null) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>        break;<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>      }<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>      createRegionServerStatusStub();<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>    }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span>    try {<a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>      rss.reportProcedureDone(null, request);<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>    } catch (ServiceException se) {<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>      if (rssStub == rss) {<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>        rssStub = null;<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span>      }<a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>    }<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>  }<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span><a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>  /**<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>   *<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>   *<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>   *<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>   * See HBASE-22404 for more details.<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>   *<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>   * @param procId the id of the open/close region procedure<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>   * @return true if the procedure can be submitted.<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>   */<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>  boolean submitRegionProcedure(long procId) {<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>    if (procId == -1) {<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>      return true;<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>    }<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>    // Ignore the region procedures which already submitted.<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>    if (previous != null) {<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span>      return false;<a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>    }<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>    // Ignore the region procedures which already executed.<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>      return false;<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span>    }<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>    return true;<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>  }<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span><a name="line.3865"></a>
+<span class="sourceLineNo">3866</span>  /**<a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>   * @param procId the id of the open/close region procedure<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>   */<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>  public void finishRegionProcedure(long procId) {<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>    executedRegionProcedures.put(procId, procId);<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span>    submittedRegionProcedures.remove(procId);<a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>  }<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span><a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>  public boolean isShutDown() {<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>    return shutDown;<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  }<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span><a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  /**<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span>   * Force to terminate region server when abort timeout.<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>   */<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span><a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>    public SystemExitWhenAbortTimeout() {<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>    }<a name="line.3885"></a>
 <span class="sourceLineNo">3886</span><a name="line.3886"></a>
-<span class="sourceLineNo">3887</span>  @VisibleForTesting<a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>    return compactedFileDischarger;<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>  }<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>}<a name="line.3891"></a>
+<span class="sourceLineNo">3887</span>    @Override<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span>    public void run() {<a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>          " Thread dump to stdout.");<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>      Runtime.getRuntime().halt(1);<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>    }<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>  }<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span><a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>  @Override<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span>    return asyncClusterConnection;<a name="line.3899"></a>
+<span class="sourceLineNo">3900</span>  }<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span><a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>  @VisibleForTesting<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>    return compactedFileDischarger;<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>  }<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>}<a name="line.3906"></a>
 
 
 
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 b694c3c..7f9cc0d 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
@@ -309,3594 +309,3609 @@
 <span class="sourceLineNo">301</span>  // Replication services. If no replication, this handler will be null.<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  // Compactions<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * encoded region name.  All access should be synchronized.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<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>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and here we really mean DataNode locations.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private LeaseManager leaseManager;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Instance of the hbase executor executorService.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected ExecutorService executorService;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private volatile boolean dataFsOk;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private HFileSystem dataFs;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private HFileSystem walFs;<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // Set when a report to the master comes back with a message asking us to<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  // of HRegionServer in isolation.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private volatile boolean stopped = false;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // debugging and unit tests.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private AtomicBoolean abortRequested;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // Default abort timeout is 1200 seconds for safe<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  // Will run this task when abort timeout<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // space regions.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private boolean stopping = false;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  private volatile boolean killed = false;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private volatile boolean shutDown = false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  protected final Configuration conf;<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private Path dataRootDir;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private Path walRootDir;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private final int threadWakeFrequency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  final int msgInterval;<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  private final int compactionCheckFrequency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int flushCheckFrequency;<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  // Stub to do region server status calls against the master.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private RpcClient rpcClient;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  // into web context.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  protected InfoServer infoServer;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private JvmPauseMonitor pauseMonitor;<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>  /** region server process name */<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public static final String REGIONSERVER = "regionserver";<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">304</span>  private boolean sameReplicationSourceAndSink;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // Compactions<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * encoded region name.  All access should be synchronized.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * and here we really mean DataNode locations.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private LeaseManager leaseManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  // Instance of the hbase executor executorService.<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  protected ExecutorService executorService;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private volatile boolean dataFsOk;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private HFileSystem dataFs;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private HFileSystem walFs;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  // Set when a report to the master comes back with a message asking us to<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  // of HRegionServer in isolation.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  private volatile boolean stopped = false;<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  // debugging and unit tests.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  private AtomicBoolean abortRequested;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  // Default abort timeout is 1200 seconds for safe<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  // Will run this task when abort timeout<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  // space regions.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  private boolean stopping = false;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  private volatile boolean killed = false;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean shutDown = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  protected final Configuration conf;<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  private Path dataRootDir;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private Path walRootDir;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private final int threadWakeFrequency;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  final int msgInterval;<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private final int compactionCheckFrequency;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private final int flushCheckFrequency;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  // Stub to do region server status calls against the master.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RpcClient rpcClient;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  // into web context.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  protected InfoServer infoServer;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private JvmPauseMonitor pauseMonitor;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  /** region server process name */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public static final String REGIONSERVER = "regionserver";<a name="line.388"></a>
 <span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private MetricsRegionServer metricsRegionServer;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private ScheduledChore periodicFlusher;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  private volatile WALFactory walFactory;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>  private LogRoller walRoller;<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  // A thread which calls reportProcedureDone<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // flag set after we're done setting up server threads<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // zookeeper connection and watcher<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  protected final ZKWatcher zooKeeper;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  // master address tracker<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  // Cluster Status Tracker<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // Log Splitting Worker<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private SplitLogWorker splitLogWorker;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  // A sleeper that sleeps for msgInterval.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected final Sleeper sleeper;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private final int shortOperationTimeout;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Block cache<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  private BlockCache blockCache;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  // The cache for mob files<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private MobFileCache mobFileCache;<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  /** The health check chore. */<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  private HealthCheckChore healthCheckChore;<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>  /** The Executor status collect chore. */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private ExecutorStatusChore executorStatusChore;<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  /** The nonce manager chore. */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  private ScheduledChore nonceManagerChore;<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * against Master.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  protected String useThisHostnameInstead;<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Exception will be thrown if both are used.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  protected String clusterId;<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  // chore for refreshing store files for secondary regions<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private StorefileRefresherChore storefileRefresher;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  private RegionServerCoprocessorHost rsHost;<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * HBASE-3787) are:<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>  final ServerNonceManager nonceManager;<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>  private UserProvider userProvider;<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  protected final RSRpcServices rpcServices;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  private CoordinatedStateManager csm;<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  /**<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   */<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  protected final ConfigurationManager configurationManager;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  @VisibleForTesting<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  private volatile ThroughputController flushThroughputController;<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Provide online slow log responses from ringbuffer<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  private NamedQueueRecorder namedQueueRecorder = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   */<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  private final boolean masterless;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  /**regionserver codec list **/<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  // A timer to shutdown the process if abort takes too long<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * &lt;p/&gt;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * Don't start any services or managers in here in the Constructor.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   */<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    super("RegionServer");  // thread name<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    TraceUtil.initTracer(conf);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    try {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      this.startcode = System.currentTimeMillis();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      this.conf = conf;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      this.dataFsOk = true;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      HFile.checkHFileVersion(this.conf);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      checkCodecs(this.conf);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>      // Disable usage of meta replicas in the regionserver<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      // Config'ed params<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.594"></a>
-<span class="sourceLineNo">595</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      this.stopped = false;<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>      initNamedQueueRecorder(conf);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      rpcServices = createRpcServices();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      String hostName =<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.604"></a>
-<span class="sourceLineNo">605</span>              : this.useThisHostnameInstead;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>      // login the zookeeper client principal (if using security)<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      // login the server principal (if using secure Hadoop)<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      login(userProvider, hostName);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // init superusers and add the server principal (if using security)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // or process owner as default super user.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Superusers.initialize(conf);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      boolean isMasterNotCarryTable =<a name="line.618"></a>
-<span class="sourceLineNo">619</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (!isMasterNotCarryTable) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        mobFileCache = new MobFileCache(conf);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>      uncaughtExceptionHandler =<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      initializeFileSystem();<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>      this.configurationManager = new ConfigurationManager();<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      // Open connection to zookeeper and set primary watcher<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        canCreateBaseZNode());<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      if (!this.masterless) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          this.csm = new ZkCoordinatedStateManager(this);<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>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        masterAddressTracker.start();<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        clusterStatusTracker.start();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      } else {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        masterAddressTracker = null;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        clusterStatusTracker = null;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.rpcServices.start(zooKeeper);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      // class HRS. TODO.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      this.choreService = new ChoreService(getName(), true);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      this.executorService = new ExecutorService(getName());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      putUpWebUI();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    } catch (Throwable t) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // cause of failed startup is lost.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.error("Failed construction RegionServer", t);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      throw t;<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>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    if (!(this instanceof HMaster)) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      if (isOnlineLogProviderEnabled) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    } else {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final boolean isBalancerDecisionRecording = conf<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      if (isBalancerDecisionRecording) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>  }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>  // HMaster should override this method to load the specific config for master<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        throw new IOException(msg);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      } else {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        return rpcServices.isa.getHostName();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    } else {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      return hostname;<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">709</span>   * If running on Windows, do windows-specific setup.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   */<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        conf.reloadConfiguration();<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        cm.notifyAllObservers(conf);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      });<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    NettyEventLoopGroupConfig nelgc =<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    return nelgc;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>  private void initializeFileSystem() throws IOException {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    // (unless all is set to defaults).<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<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>  protected void login(UserProvider user, String host) throws IOException {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Wait for an active Master.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * See override in Master superclass for how it is used.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  protected void waitForMasterActive() {}<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected String getProcessName() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return REGIONSERVER;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  protected boolean canCreateBaseZNode() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return this.masterless;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  protected boolean canUpdateTableDescriptor() {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    return false;<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  }<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    return new RSRpcServices(this);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span>  protected void configureInfoServer() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    return RSDumpServlet.class;<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  }<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>  @Override<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean registerService(Service instance) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    // No stacking of instances is allowed for a single executorService name<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        " already registered, rejecting request from " + instance);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      return false;<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>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    if (LOG.isDebugEnabled()) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      LOG.debug(<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    return true;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>  }<a name="line.803"></a>
-<span class="sourceLineNo">804</span><a name="line.804"></a>
-<span class="sourceLineNo">805</span>  private Configuration cleanupConfiguration() {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    Configuration conf = this.conf;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    //   masters' availability.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    //   other internal connections too.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.817"></a>
-<span class="sourceLineNo">818</span>      // the conf and unset the client ZK related properties<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      conf = new Configuration(this.conf);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return conf;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   */<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    // check to see if the codec list is available:<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    if (codecs == null) return;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (String codec : codecs) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        throw new IOException("Compression codec " + codec +<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          " not supported, aborting RS construction");<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      }<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    }<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  }<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>  public String getClusterId() {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    return this.clusterId;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>  /**<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * Setup our cluster connection if not already initialized.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   */<a name="line.846"></a>
-<span class="sourceLineNo">847</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (asyncClusterConnection == null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      Configuration conf = cleanupConfiguration();<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      User user = userProvider.getCurrent();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      asyncClusterConnection =<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  /**<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  private void preRegistrationInitialization() {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    try {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      initializeZooKeeper();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>      setupClusterConnection();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      // Setup RPC client for master communication<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    } catch (Throwable t) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      // Call stop if error or process will stick around for ever since server<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      // puts up non-daemon threads.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      this.rpcServices.stop();<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  /**<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Finally open long-living server short-circuit connection.<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   */<a name="line.881"></a>
-<span class="sourceLineNo">882</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    justification="cluster Id znode read would give us correct response")<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Nothing to do in here if no Master in the mix.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (this.masterless) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      return;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    // block until a master is available.  No point in starting up if no master<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    // running.<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    // when ready.<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    if (clusterId == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      // Retrieve clusterId<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      // Since cluster status is now up<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      // ID should have already been set by HMaster<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      try {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        if (clusterId == null) {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          this.abort("Cluster ID has not been set");<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>        LOG.info("ClusterId : " + clusterId);<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      } catch (KeeperException e) {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      }<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    }<a name="line.913"></a>
-<span class="sourceLineNo">914</span><a name="line.914"></a>
-<span class="sourceLineNo">915</span>    waitForMasterActive();<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    if (isStopped() || isAborted()) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      return; // No need for further initialization<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    }<a name="line.918"></a>
-<span class="sourceLineNo">919</span><a name="line.919"></a>
-<span class="sourceLineNo">920</span>    // watch for snapshots and other procedures<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    try {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      rspmHost.loadProcedures(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      rspmHost.initialize(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    } catch (KeeperException e) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.929"></a>
-<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.931"></a>
-<span class="sourceLineNo">932</span>   * if the region server is shut down<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   * @param tracker znode tracker to use<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   */<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.937"></a>
-<span class="sourceLineNo">938</span>      throws IOException, InterruptedException {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      if (this.stopped) {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      }<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  /**<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * @return True if the cluster is up.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>   */<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @Override<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  public boolean isClusterUp() {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    return this.masterless ||<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.952"></a>
-<span class="sourceLineNo">953</span>  }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>  /**<a name="line.955"></a>
-<span class="sourceLineNo">956</span>   * The HRegionServer sticks in this loop until closed.<a name="line.956"></a>
-<span class="sourceLineNo">957</span>   */<a name="line.957"></a>
-<span class="sourceLineNo">958</span>  @Override<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  public void run() {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (isStopped()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.info("Skipping run; stopped");<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>      preRegistrationInitialization();<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    } catch (Throwable e) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      abort("Fatal exception during initialization", e);<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    }<a name="line.969"></a>
-<span class="sourceLineNo">970</span><a name="line.970"></a>
-<span class="sourceLineNo">971</span>    try {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        // come up.<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        LOG.debug("About to register with Master.");<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        RetryCounterFactory rcf =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        RetryCounter rc = rcf.create();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        while (keepLooping()) {<a name="line.986"></a>
-<span class="sourceLineNo">987</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>          if (w == null) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.989"></a>
-<span class="sourceLineNo">990</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            this.sleeper.sleep(sleepTime);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>          } else {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>            handleReportForDutyResponse(w);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>            break;<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          }<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      }<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>        // start the snapshot handler and other procedure handlers,<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        // since the server is ready to run<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>        if (this.rspmHost != null) {<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          this.rspmHost.start();<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>        }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        // Start the Quota Manager<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>        if (this.rsQuotaManager != null) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          this.rsSpaceQuotaManager.start();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span><a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // We registered with the Master.  Go into run mode.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      long lastMsg = System.currentTimeMillis();<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      long oldRequestCount = -1;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // The main run loop.<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        if (!isClusterUp()) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>          if (onlineRegions.isEmpty()) {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>          } else if (!this.stopping) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>            this.stopping = true;<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>            LOG.info("Closing user regions");<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>            closeUserRegions(this.abortRequested.get());<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>          } else {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            if (allUserRegionsOffline) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              // Set stopped if no more write requests tp meta tables<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>              // since last time we went around the loop.  Any open<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>              // meta regions will be closed on our way out.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>                break;<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>              }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>              oldRequestCount = getWriteRequestCount();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>            } else {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>              // Make sure all regions have been closed -- some regions may<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>              // have not got it because we were splitting at the time of<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>              // the call to closeUserRegions.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>              closeUserRegions(this.abortRequested.get());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>        long now = System.currentTimeMillis();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          tryRegionServerReport(lastMsg, now);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          lastMsg = System.currentTimeMillis();<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>        }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>          this.sleeper.sleep();<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>        }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      } // for<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    } catch (Throwable t) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>        abort(prefix + t.getMessage(), t);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    if (this.leaseManager != null) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    if (this.splitLogWorker != null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>      splitLogWorker.stop();<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    if (this.infoServer != null) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.info("Stopping infoServer");<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      try {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>        this.infoServer.stop();<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      } catch (Exception e) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    }<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // Send cache a shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    if (blockCache != null) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      blockCache.shutdown();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (mobFileCache != null) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      mobFileCache.shutdown();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span><a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span><a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (rspmHost != null) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (this.killed) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    } else if (abortRequested.get()) {<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      if (this.dataFsOk) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      LOG.info("aborting server " + this.serverName);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    } else {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      closeUserRegions(abortRequested.get());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      LOG.info("stopping server " + this.serverName);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    if (this.asyncClusterConnection != null) {<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>      try {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>        this.asyncClusterConnection.close();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      } catch (IOException e) {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      }<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    }<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        if (this.compactSplitThread != null) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>          this.compactSplitThread.join();<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          this.compactSplitThread = null;<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    }<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    // Stop the quota manager<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    if (rsQuotaManager != null) {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsQuotaManager.stop();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    if (rsSpaceQuotaManager != null) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      rsSpaceQuotaManager.stop();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager = null;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    // flag may be changed when closing regions throws exception.<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    if (this.dataFsOk) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      shutdownWAL(!abortRequested.get());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    // Make sure the proxy is down.<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    if (this.rssStub != null) {<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      this.rssStub = null;<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    if (this.lockStub != null) {<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.lockStub = null;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>    if (this.rpcClient != null) {<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      this.rpcClient.close();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    }<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    if (this.leaseManager != null) {<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      this.leaseManager.close();<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    }<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (this.pauseMonitor != null) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.pauseMonitor.stop();<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    if (!killed) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      stopServiceThreads();<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    if (this.rpcServices != null) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      this.rpcServices.stop();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      deleteMyEphemeralNode();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      // pass<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    } catch (KeeperException e) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span><a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    if (this.zooKeeper != null) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      this.zooKeeper.close();<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.shutDown = true;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  private boolean containsMetaTableRegions() {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>  }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span><a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>  private boolean areAllUserRegionsOffline() {<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    boolean allUserRegionsOffline = true;<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        allUserRegionsOffline = false;<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        break;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      }<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    return allUserRegionsOffline;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span><a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>  /**<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   * @return Current write count for all online regions.<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>   */<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  private long getWriteRequestCount() {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    long writeCount = 0;<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    }<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    return writeCount;<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span><a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  @VisibleForTesting<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      throws IOException {<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>      return;<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      request.setLoad(sl);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      rss.regionServerReport(null, request.build());<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    } catch (ServiceException se) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // This will be caught and handled as a fatal error in run()<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        throw ioe;<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>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      // Method blocks until new master is found or we are stopped<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>      createRegionServerStatusStub(true);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    }<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  }<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span><a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   *<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * @param regionSizeStore The store containing region sizes<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>   */<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    if (rss == null) {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      // the current server could be stopping.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      return true;<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    try {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    } catch (ServiceException se) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>            + " This will be retried.", ioe);<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        return true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      if (rssStub == rss) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        rssStub = null;<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      createRegionServerStatusStub(true);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>            return false;<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return true;<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param rss The stub to send to the Master<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param regionSizeStore The store containing region sizes<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    RegionSpaceUseReportRequest request =<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    // Record the number of size reports sent<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    if (metricsRegionServer != null) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>  }<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span><a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  /**<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>   *<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * @param regionSizes The size in bytes of regions<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * @return The corresponding protocol buffer message.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   */<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    return request.build();<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span><a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  /**<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * protobuf message.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   *<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * @param regionInfo The RegionInfo<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>   * @return The protocol buffer<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   */<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    return RegionSpaceUse.newBuilder()<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        .build();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      throws IOException {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    // the wrapper to compute those numbers in one place.<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    // history.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    long usedMemory = -1L;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    long maxMemory = -1L;<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    if (usage != null) {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>      usedMemory = usage.getUsed();<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      maxMemory = usage.getMax();<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>    for (String coprocessor : coprocessors) {<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    for (HRegion region : regions) {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      if (region.getCoprocessorHost() != null) {<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>          .getCoprocessors()) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      }<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    if (this.infoServer != null) {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    } else {<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      serverLoad.setInfoServerPort(-1);<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>    }<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    MetricsUserAggregateSource userSource =<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    if (userSource != null) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      }<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    }<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    // either source or sink will get the same info<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    if (rsources != null) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      // always refresh first to get the latest value<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      if (rLoad != null) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS :<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            rLoad.getReplicationLoadSourceEntries()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>          serverLoad.addReplLoadSource(rLS);<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>    }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span><a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    return serverLoad.build();<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>  }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span><a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>    StringBuilder sb = new StringBuilder();<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>    }<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    return sb.toString();<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>  }<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span><a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>  /**<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>   * Wait on regions close.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   */<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    // Wait till all regions are closed before going out.<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    int lastCount = -1;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    long previousLogTime = 0;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>    boolean interrupted = false;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    try {<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      while (!onlineRegions.isEmpty()) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>        int count = getNumberOfOnlineRegions();<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        // Only print a message if the count of regions has changed.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>        if (count != lastCount) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>          // Log every second at most<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>            previousLogTime = System.currentTimeMillis();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>            lastCount = count;<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>            // Only print out regions still closing if a small number else will<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>            // swamp the log.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>            }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>          }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        // protect against the case where an open comes in after we start the<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        // iterator of onlineRegions to close all user regions.<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>            closedRegions.add(hri.getEncodedName());<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>            // Don't update zk with this close transition; pass false.<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>          }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        // No regions in RIT, we could stop waiting now.<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>          if (!onlineRegions.isEmpty()) {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>                " because some regions failed closing");<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>          }<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>          break;<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        } else {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>        }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        if (sleepInterrupted(200)) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>          interrupted = true;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        }<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      }<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    } finally {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      if (interrupted) {<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        Thread.currentThread().interrupt();<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>    boolean interrupted = false;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    try {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      Thread.sleep(millis);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>    } catch (InterruptedException e) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      LOG.warn("Interrupted while sleeping");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>      interrupted = true;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>    }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>    return interrupted;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  private void shutdownWAL(final boolean close) {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>    if (this.walFactory != null) {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>      try {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        if (close) {<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>          walFactory.close();<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        } else {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>          walFactory.shutdown();<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>        }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      } catch (Throwable e) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span><a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>   *<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>   * @return NamedQueueRecorder<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>   */<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    return this.namedQueueRecorder;<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>  /*<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>   *<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * @param c Extra configuration.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   */<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  throws IOException {<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    try {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      boolean updateRootDir = false;<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        String key = e.getName();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        // The hostname the master sees us as.<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>              this.startcode);<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>            LOG.error(msg);<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>            throw new IOException(msg);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            LOG.error(msg);<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>          }<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>          continue;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>        }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>        String value = e.getValue();<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            updateRootDir = true;<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>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        if (LOG.isDebugEnabled()) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        this.conf.set(key, value);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      createMyEphemeralNode();<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (updateRootDir) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        initializeFileSystem();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      }<a name="line.1568"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private MetricsRegionServer metricsRegionServer;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private ScheduledChore periodicFlusher;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  private volatile WALFactory walFactory;<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  private LogRoller walRoller;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  // A thread which calls reportProcedureDone<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  // flag set after we're done setting up server threads<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  // zookeeper connection and watcher<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  protected final ZKWatcher zooKeeper;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  // master address tracker<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  // Cluster Status Tracker<a name="line.426"></a>
+<span class="sourceLineNo">427</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  // Log Splitting Worker<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private SplitLogWorker splitLogWorker;<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>  // A sleeper that sleeps for msgInterval.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  protected final Sleeper sleeper;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  private final int shortOperationTimeout;<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  // Block cache<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  private BlockCache blockCache;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>  // The cache for mob files<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  private MobFileCache mobFileCache;<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  /** The health check chore. */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  private HealthCheckChore healthCheckChore;<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>  /** The Executor status collect chore. */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private ExecutorStatusChore executorStatusChore;<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>  /** The nonce manager chore. */<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private ScheduledChore nonceManagerChore;<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  /**<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * against Master.<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  protected String useThisHostnameInstead;<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>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Exception will be thrown if both are used.<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   */<a name="line.472"></a>
+<span class="sourceLineNo">473</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  protected String clusterId;<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>  // chore for refreshing store files for secondary regions<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private StorefileRefresherChore storefileRefresher;<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  private RegionServerCoprocessorHost rsHost;<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * HBASE-3787) are:<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  final ServerNonceManager nonceManager;<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>  private UserProvider userProvider;<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  protected final RSRpcServices rpcServices;<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>  private CoordinatedStateManager csm;<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  protected final ConfigurationManager configurationManager;<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  @VisibleForTesting<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  private volatile ThroughputController flushThroughputController;<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<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>   * Provide online slow log responses from ringbuffer<a name="line.541"></a>
+<span class="sourceLineNo">542</span>   */<a name="line.542"></a>
+<span class="sourceLineNo">543</span>  private NamedQueueRecorder namedQueueRecorder = 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>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.548"></a>
+<span class="sourceLineNo">549</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.550"></a>
+<span class="sourceLineNo">551</span>   */<a name="line.551"></a>
+<span class="sourceLineNo">552</span>  private final boolean masterless;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>  /**regionserver codec list **/<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // A timer to shutdown the process if abort takes too long<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * &lt;p/&gt;<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   * Don't start any services or managers in here in the Constructor.<a name="line.564"></a>
+<span class="sourceLineNo">565</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    super("RegionServer");  // thread name<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    TraceUtil.initTracer(conf);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      this.startcode = System.currentTimeMillis();<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.conf = conf;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.dataFsOk = true;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      HFile.checkHFileVersion(this.conf);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      checkCodecs(this.conf);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // Disable usage of meta replicas in the regionserver<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      // Config'ed params<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.595"></a>
+<span class="sourceLineNo">596</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      this.stopped = false;<a name="line.599"></a>
+<span class="sourceLineNo">600</span><a name="line.600"></a>
+<span class="sourceLineNo">601</span>      initNamedQueueRecorder(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      rpcServices = createRpcServices();<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      String hostName =<a name="line.604"></a>
+<span class="sourceLineNo">605</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              : this.useThisHostnameInstead;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>      // login the zookeeper client principal (if using security)<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      // login the server principal (if using secure Hadoop)<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      login(userProvider, hostName);<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      // init superusers and add the server principal (if using security)<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      // or process owner as default super user.<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      Superusers.initialize(conf);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>      boolean isMasterNotCarryTable =<a name="line.619"></a>
+<span class="sourceLineNo">620</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      if (!isMasterNotCarryTable) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        mobFileCache = new MobFileCache(conf);<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>      uncaughtExceptionHandler =<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span><a name="line.630"></a>
+<span class="sourceLineNo">631</span>      initializeFileSystem();<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>      this.configurationManager = new ConfigurationManager();<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      // Open connection to zookeeper and set primary watcher<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        canCreateBaseZNode());<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      if (!this.masterless) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        masterAddressTracker.start();<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        clusterStatusTracker.start();<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        masterAddressTracker = null;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>        clusterStatusTracker = null;<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.rpcServices.start(zooKeeper);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      // class HRS. TODO.<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.choreService = new ChoreService(getName(), true);<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      this.executorService = new ExecutorService(getName());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      putUpWebUI();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    } catch (Throwable t) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      // cause of failed startup is lost.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      LOG.error("Failed construction RegionServer", t);<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      throw t;<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><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    if (!(this instanceof HMaster)) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.676"></a>
+<span class="sourceLineNo">677</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      if (isOnlineLogProviderEnabled) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>      }<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    } else {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      final boolean isBalancerDecisionRecording = conf<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      if (isBalancerDecisionRecording) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>  // HMaster should override this method to load the specific config for master<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.697"></a>
+<span class="sourceLineNo">698</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.699"></a>
+<span class="sourceLineNo">700</span>        throw new IOException(msg);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      } else {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        return rpcServices.isa.getHostName();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      }<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    } else {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return hostname;<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">709</span>  /**<a name="line.709"></a>
+<span class="sourceLineNo">710</span>   * If running on Windows, do windows-specific setup.<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>        conf.reloadConfiguration();<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        cm.notifyAllObservers(conf);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      });<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
+<span class="sourceLineNo">720</span><a name="line.720"></a>
+<span class="sourceLineNo">721</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    NettyEventLoopGroupConfig nelgc =<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    return nelgc;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
+<span class="sourceLineNo">729</span><a name="line.729"></a>
+<span class="sourceLineNo">730</span>  private void initializeFileSystem() throws IOException {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    // (unless all is set to defaults).<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.748"></a>
+<span class="sourceLineNo">749</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>  /**<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   * Wait for an active Master.<a name="line.753"></a>
+<span class="sourceLineNo">754</span>   * See override in Master superclass for how it is used.<a name="line.754"></a>
+<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  protected void waitForMasterActive() {}<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  protected String getProcessName() {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    return REGIONSERVER;<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
+<span class="sourceLineNo">761</span><a name="line.761"></a>
+<span class="sourceLineNo">762</span>  protected boolean canCreateBaseZNode() {<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    return this.masterless;<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>  protected boolean canUpdateTableDescriptor() {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    return false;<a name="line.771"></a>
+<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
+<span class="sourceLineNo">773</span><a name="line.773"></a>
+<span class="sourceLineNo">774</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    return new RSRpcServices(this);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>  }<a name="line.776"></a>
+<span class="sourceLineNo">777</span><a name="line.777"></a>
+<span class="sourceLineNo">778</span>  protected void configureInfoServer() {<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    return RSDumpServlet.class;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>  @Override<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  public boolean registerService(Service instance) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    // No stacking of instances is allowed for a single executorService name<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.793"></a>
+<span class="sourceLineNo">794</span>        " already registered, rejecting request from " + instance);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      return false;<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span><a name="line.797"></a>
+<span class="sourceLineNo">798</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    if (LOG.isDebugEnabled()) {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      LOG.debug(<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    }<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    return true;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>  }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span>  private Configuration cleanupConfiguration() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    Configuration conf = this.conf;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    //   masters' availability.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    //   other internal connections too.<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      // the conf and unset the client ZK related properties<a name="line.819"></a>
+<span class="sourceLineNo">820</span>      conf = new Configuration(this.conf);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    }<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    return conf;<a name="line.823"></a>
+<span class="sourceLineNo">824</span>  }<a name="line.824"></a>
+<span class="sourceLineNo">825</span><a name="line.825"></a>
+<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
+<span class="sourceLineNo">829</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    // check to see if the codec list is available:<a name="line.830"></a>
+<span class="sourceLineNo">831</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    if (codecs == null) return;<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    for (String codec : codecs) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>        throw new IOException("Compression codec " + codec +<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          " not supported, aborting RS construction");<a name="line.836"></a>
+<span class="sourceLineNo">837</span>      }<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    }<a name="line.838"></a>
+<span class="sourceLineNo">839</span>  }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span>  public String getClusterId() {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    return this.clusterId;<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span>  /**<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * Setup our cluster connection if not already initialized.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   */<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    if (asyncClusterConnection == null) {<a name="line.849"></a>
+<span class="sourceLineNo">850</span>      Configuration conf = cleanupConfiguration();<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      User user = userProvider.getCurrent();<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      asyncClusterConnection =<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>    }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   */<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  private void preRegistrationInitialization() {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    try {<a name="line.864"></a>
+<span class="sourceLineNo">865</span>      initializeZooKeeper();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      setupClusterConnection();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>      // Setup RPC client for master communication<a name="line.867"></a>
+<span class="sourceLineNo">868</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    } catch (Throwable t) {<a name="line.869"></a>
+<span class="sourceLineNo">870</span>      // Call stop if error or process will stick around for ever since server<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      // puts up non-daemon threads.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      this.rpcServices.stop();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
+<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * &lt;p&gt;<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * Finally open long-living server short-circuit connection.<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   */<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    justification="cluster Id znode read would give us correct response")<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    // Nothing to do in here if no Master in the mix.<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    if (this.masterless) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      return;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    // block until a master is available.  No point in starting up if no master<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    // running.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    // when ready.<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.900"></a>
+<span class="sourceLineNo">901</span>    if (clusterId == null) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>      // Retrieve clusterId<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      // Since cluster status is now up<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      // ID should have already been set by HMaster<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      try {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        if (clusterId == null) {<a name="line.907"></a>
+<span class="sourceLineNo">908</span>          this.abort("Cluster ID has not been set");<a name="line.908"></a>
+<span class="sourceLineNo">909</span>        }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>        LOG.info("ClusterId : " + clusterId);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      } catch (KeeperException e) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      }<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>    waitForMasterActive();<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    if (isStopped() || isAborted()) {<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      return; // No need for further initialization<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>    // watch for snapshots and other procedures<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    try {<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      rspmHost.loadProcedures(conf);<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      rspmHost.initialize(this);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    } catch (KeeperException e) {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
+<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
+<span class="sourceLineNo">930</span><a name="line.930"></a>
+<span class="sourceLineNo">931</span>  /**<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * if the region server is shut down<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * @param tracker znode tracker to use<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      throws IOException, InterruptedException {<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      if (this.stopped) {<a name="line.941"></a>
+<span class="sourceLineNo">942</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    }<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  }<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>  /**<a name="line.947"></a>
+<span class="sourceLineNo">948</span>   * @return True if the cluster is up.<a name="line.948"></a>
+<span class="sourceLineNo">949</span>   */<a name="line.949"></a>
+<span class="sourceLineNo">950</span>  @Override<a name="line.950"></a>
+<span class="sourceLineNo">951</span>  public boolean isClusterUp() {<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    return this.masterless ||<a name="line.952"></a>
+<span class="sourceLineNo">953</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.953"></a>
+<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
+<span class="sourceLineNo">955</span><a name="line.955"></a>
+<span class="sourceLineNo">956</span>  /**<a name="line.956"></a>
+<span class="sourceLineNo">957</span>   * The HRegionServer sticks in this loop until closed.<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   */<a name="line.958"></a>
+<span class="sourceLineNo">959</span>  @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public void run() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    if (isStopped()) {<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      LOG.info("Skipping run; stopped");<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      return;<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    }<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    try {<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      preRegistrationInitialization();<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    } catch (Throwable e) {<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      abort("Fatal exception during initialization", e);<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    }<a name="line.970"></a>
+<span class="sourceLineNo">971</span><a name="line.971"></a>
+<span class="sourceLineNo">972</span>    try {<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.974"></a>
+<span class="sourceLineNo">975</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.975"></a>
+<span class="sourceLineNo">976</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.979"></a>
+<span class="sourceLineNo">980</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.981"></a>
+<span class="sourceLineNo">982</span>        // come up.<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        LOG.debug("About to register with Master.");<a name="line.983"></a>
+<span class="sourceLineNo">984</span>        RetryCounterFactory rcf =<a name="line.984"></a>
+<span class="sourceLineNo">985</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        RetryCounter rc = rcf.create();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        while (keepLooping()) {<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          if (w == null) {<a name="line.989"></a>
+<span class="sourceLineNo">990</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.990"></a>
+<span class="sourceLineNo">991</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.991"></a>
+<span class="sourceLineNo">992</span>            this.sleeper.sleep(sleepTime);<a name="line.992"></a>
+<span class="sourceLineNo">993</span>          } else {<a name="line.993"></a>
+<span class="sourceLineNo">994</span>            handleReportForDutyResponse(w);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>            break;<a name="line.995"></a>
+<span class="sourceLineNo">996</span>          }<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        }<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      }<a name="line.998"></a>
+<span class="sourceLineNo">999</span><a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>        // start the snapshot handler and other procedure handlers,<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>        // since the server is ready to run<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>        if (this.rspmHost != null) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>          this.rspmHost.start();<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        }<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        // Start the Quota Manager<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>        if (this.rsQuotaManager != null) {<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>        }<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>          this.rsSpaceQuotaManager.start();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>        }<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span><a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // We registered with the Master.  Go into run mode.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      long lastMsg = System.currentTimeMillis();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      long oldRequestCount = -1;<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      // The main run loop.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        if (!isClusterUp()) {<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>          if (onlineRegions.isEmpty()) {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          } else if (!this.stopping) {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>            this.stopping = true;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>            LOG.info("Closing user regions");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>            closeUserRegions(this.abortRequested.get());<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>          } else {<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>            if (allUserRegionsOffline) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>              // Set stopped if no more write requests tp meta tables<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>              // since last time we went around the loop.  Any open<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>              // meta regions will be closed on our way out.<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>                break;<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>              }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>              oldRequestCount = getWriteRequestCount();<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>            } else {<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>              // Make sure all regions have been closed -- some regions may<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>              // have not got it because we were splitting at the time of<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>              // the call to closeUserRegions.<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>              closeUserRegions(this.abortRequested.get());<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>            }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>          }<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>        }<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>        long now = System.currentTimeMillis();<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>          tryRegionServerReport(lastMsg, now);<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          lastMsg = System.currentTimeMillis();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>        }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>          this.sleeper.sleep();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>        }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      } // for<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    } catch (Throwable t) {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        abort(prefix + t.getMessage(), t);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span><a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    if (this.leaseManager != null) {<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    if (this.splitLogWorker != null) {<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      splitLogWorker.stop();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (this.infoServer != null) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      LOG.info("Stopping infoServer");<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      try {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>        this.infoServer.stop();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      } catch (Exception e) {<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // Send cache a shutdown.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (blockCache != null) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      blockCache.shutdown();<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    if (mobFileCache != null) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      mobFileCache.shutdown();<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span><a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    if (rspmHost != null) {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    if (this.killed) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } else if (abortRequested.get()) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      if (this.dataFsOk) {<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      }<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      LOG.info("aborting server " + this.serverName);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    } else {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      closeUserRegions(abortRequested.get());<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      LOG.info("stopping server " + this.serverName);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span><a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    if (this.asyncClusterConnection != null) {<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      try {<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        this.asyncClusterConnection.close();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      } catch (IOException e) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        if (this.compactSplitThread != null) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>          this.compactSplitThread.join();<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>          this.compactSplitThread = null;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>        }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>      }<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    // Stop the quota manager<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    if (rsQuotaManager != null) {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      rsQuotaManager.stop();<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    if (rsSpaceQuotaManager != null) {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager.stop();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      rsSpaceQuotaManager = null;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    }<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span><a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    // flag may be changed when closing regions throws exception.<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (this.dataFsOk) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      shutdownWAL(!abortRequested.get());<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span><a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    // Make sure the proxy is down.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    if (this.rssStub != null) {<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      this.rssStub = null;<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    if (this.lockStub != null) {<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      this.lockStub = null;<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    }<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (this.rpcClient != null) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      this.rpcClient.close();<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    if (this.leaseManager != null) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      this.leaseManager.close();<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    if (this.pauseMonitor != null) {<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      this.pauseMonitor.stop();<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    if (!killed) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      stopServiceThreads();<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span><a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    if (this.rpcServices != null) {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>      this.rpcServices.stop();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    }<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span><a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    try {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      deleteMyEphemeralNode();<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      // pass<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    } catch (KeeperException e) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span><a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    if (this.zooKeeper != null) {<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>      this.zooKeeper.close();<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>    this.shutDown = true;<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  private boolean containsMetaTableRegions() {<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  private boolean areAllUserRegionsOffline() {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    boolean allUserRegionsOffline = true;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>        allUserRegionsOffline = false;<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        break;<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      }<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    return allUserRegionsOffline;<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  /**<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   * @return Current write count for all online regions.<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private long getWriteRequestCount() {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    long writeCount = 0;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    return writeCount;<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>  }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span><a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  @VisibleForTesting<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      throws IOException {<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>      return;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      request.setLoad(sl);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      rss.regionServerReport(null, request.build());<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    } catch (ServiceException se) {<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>        // This will be caught and handled as a fatal error in run()<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        throw ioe;<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      if (rssStub == rss) {<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>        rssStub = null;<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      }<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      // Method blocks until new master is found or we are stopped<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      createRegionServerStatusStub(true);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  }<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span><a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>  /**<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>   *<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   * @param regionSizeStore The store containing region sizes<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>   */<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    if (rss == null) {<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      // the current server could be stopping.<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      return true;<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    }<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    try {<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>    } catch (ServiceException se) {<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>            + " This will be retried.", ioe);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>        return true;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>      if (rssStub == rss) {<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        rssStub = null;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>      }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>      createRegionServerStatusStub(true);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>            return false;<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>          }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>        }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>      }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>    }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    return true;<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>  /**<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   *<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @param rss The stub to send to the Master<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   * @param regionSizeStore The store containing region sizes<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>    RegionSpaceUseReportRequest request =<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    // Record the number of size reports sent<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>    if (metricsRegionServer != null) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  /**<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>   *<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>   * @param regionSizes The size in bytes of regions<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>   * @return The corresponding protocol buffer message.<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>   */<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    return request.build();<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>  }<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  /**<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>   * protobuf message.<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>   *<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>   * @param regionInfo The RegionInfo<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>   * @return The protocol buffer<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>   */<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    return RegionSpaceUse.newBuilder()<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>        .build();<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  }<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span><a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>      throws IOException {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    // the wrapper to compute those numbers in one place.<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    // history.<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    long usedMemory = -1L;<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    long maxMemory = -1L;<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>    if (usage != null) {<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>      usedMemory = usage.getUsed();<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>    for (String coprocessor : coprocessors) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>    }<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    for (HRegion region : regions) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      if (region.getCoprocessorHost() != null) {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          .getCoprocessors()) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    if (this.infoServer != null) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>    } else {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      serverLoad.setInfoServerPort(-1);<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    MetricsUserAggregateSource userSource =<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    if (userSource != null) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    if (sameReplicationSourceAndSink &amp;&amp; replicationSourceHandler != null) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      // always refresh first to get the latest value<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>      ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      if (rLoad != null) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>          .getReplicationLoadSourceEntries()) {<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    } else {<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      if (replicationSourceHandler != null) {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        if (rLoad != null) {<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>          for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>            .getReplicationLoadSourceEntries()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>            serverLoad.addReplLoadSource(rLS);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          }<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        }<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      if (replicationSinkHandler != null) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        ReplicationLoad rLoad = replicationSinkHandler.refreshAndGetReplicationLoad();<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>        if (rLoad != null) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>          serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    return serverLoad.build();<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span><a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    StringBuilder sb = new StringBuilder();<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    return sb.toString();<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>  }<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span><a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>  /**<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>   * Wait on regions close.<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   */<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    // Wait till all regions are closed before going out.<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    int lastCount = -1;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    long previousLogTime = 0;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>    boolean interrupted = false;<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>    try {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      while (!onlineRegions.isEmpty()) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        int count = getNumberOfOnlineRegions();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        // Only print a message if the count of regions has changed.<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>        if (count != lastCount) {<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>          // Log every second at most<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>            previousLogTime = System.currentTimeMillis();<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>            lastCount = count;<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>            // Only print out regions still closing if a small number else will<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>            // swamp the log.<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>            }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>          }<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        // protect against the case where an open comes in after we start the<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        // iterator of onlineRegions to close all user regions.<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>            closedRegions.add(hri.getEncodedName());<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>            // Don't update zk with this close transition; pass false.<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>          }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        // No regions in RIT, we could stop waiting now.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>          if (!onlineRegions.isEmpty()) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>                " because some regions failed closing");<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          }<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          break;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        }<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        if (sleepInterrupted(200)) {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>          interrupted = true;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        }<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    } finally {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      if (interrupted) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        Thread.currentThread().interrupt();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      }<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>    }<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    boolean interrupted = false;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    try {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>      Thread.sleep(millis);<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    } catch (InterruptedException e) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>      LOG.warn("Interrupted while sleeping");<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      interrupted = true;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    return interrupted;<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>  }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>  private void shutdownWAL(final boolean close) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    if (this.walFactory != null) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      try {<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        if (close) {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>          walFactory.close();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        } else {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          walFactory.shutdown();<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (Throwable e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      }<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span><a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>  /**<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   *<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   * @return NamedQueueRecorder<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>   */<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>    return this.namedQueueRecorder;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>  /*<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>   *<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>   * @param c Extra configuration.<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>   */<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  throws IOException {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    try {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      boolean updateRootDir = false;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>        String key = e.getName();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>        // The hostname the master sees us as.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              this.startcode);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>            LOG.error(msg);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>            throw new IOException(msg);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>          }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            LOG.error(msg);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>          }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          continue;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>        }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span><a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        String value = e.getValue();<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>            updateRootDir = true;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>          }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        }<a name="line.1568"></a>
 <span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1573"></a>
+<span class="sourceLineNo">1570</span>        if (LOG.isDebugEnabled()) {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        this.conf.set(key, value);<a name="line.1573"></a>
 <span class="sourceLineNo">1574</span>      }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      // Save it in a file, this will allow to see if we crash<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      setupWALAndReplication();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      final MetricsTable metricsTable =<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      pauseMonitor.start();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>        startServices();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      // or make sense of it.<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      startReplicationService();<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span><a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      // Set up ZK<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>          ", sessionid=0x" +<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span><a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      // Wake up anyone waiting for this server to online<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>      synchronized (online) {<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        online.set(true);<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        online.notifyAll();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    } catch (Throwable e) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      stop("Failed initialization");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>          "Region server startup failed");<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    } finally {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      sleeper.skipSleepCycle();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      // it.<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      // init the chunkCreator<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  }<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span><a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  private void startHeapMemoryManager() {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    if (this.blockCache != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      this.hMemManager =<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      this.hMemManager.start(getChoreService());<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>    }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>  }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span><a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  @Override<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>    return regionServerAccounting;<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   * @param r Region to get RegionLoad for.<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>   * @return RegionLoad instance.<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>   */<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>    int stores = 0;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    int storefiles = 0;<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>    int storeRefCount = 0;<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    int storeUncompressedSizeMB = 0;<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    int storefileSizeMB = 0;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    long storefileIndexSizeKB = 0;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>    int rootLevelIndexSizeKB = 0;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    int totalStaticIndexSizeKB = 0;<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    int totalStaticBloomSizeKB = 0;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    long totalCompactingKVs = 0;<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    long currentCompactedKVs = 0;<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>    stores += storeList.size();<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>    for (HStore store : storeList) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      storefiles += store.getStorefilesCount();<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      storeRefCount += currentStoreRefCount;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>      if (progress != null) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>      }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>    }<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span><a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    if (regionLoadBldr == null) {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    if (regionSpecifier == null) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1721"></a>
+<span class="sourceLineNo">1575</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      createMyEphemeralNode();<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span><a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      if (updateRootDir) {<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        initializeFileSystem();<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span><a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      }<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span><a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      // Save it in a file, this will allow to see if we crash<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      setupWALAndReplication();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      final MetricsTable metricsTable =<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      pauseMonitor.start();<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        startServices();<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      // or make sense of it.<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      startReplicationService();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span><a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      // Set up ZK<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          ", sessionid=0x" +<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span><a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>      // Wake up anyone waiting for this server to online<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      synchronized (online) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        online.set(true);<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        online.notifyAll();<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>    } catch (Throwable e) {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      stop("Failed initialization");<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>          "Region server startup failed");<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    } finally {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      sleeper.skipSleepCycle();<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>  }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span><a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>      // it.<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      // init the chunkCreator<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>  }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span><a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>  private void startHeapMemoryManager() {<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    if (this.blockCache != null) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      this.hMemManager =<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      this.hMemManager.start(getChoreService());<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>  }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span><a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>  }<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span><a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>  }<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span><a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  @Override<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    return regionServerAccounting;<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  }<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span><a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /**<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @param r Region to get RegionLoad for.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>   * @return RegionLoad instance.<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>   */<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    int stores = 0;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    int storefiles = 0;<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    int storeRefCount = 0;<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>    int storeUncompressedSizeMB = 0;<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    int storefileSizeMB = 0;<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    long storefileIndexSizeKB = 0;<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>    int rootLevelIndexSizeKB = 0;<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    int totalStaticIndexSizeKB = 0;<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    int totalStaticBloomSizeKB = 0;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    long totalCompactingKVs = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    long currentCompactedKVs = 0;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    stores += storeList.size();<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    for (HStore store : storeList) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      storefiles += store.getStorefilesCount();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>      storeRefCount += currentStoreRefCount;<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (progress != null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>    }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      .setStores(stores)<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>      .setStorefiles(storefiles)<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>      .setStoreRefCount(storeRefCount)<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      .setDataLocality(dataLocality)<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    return regionLoadBldr.build();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>  }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span><a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    userLoadBldr.setUserName(user);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>            .setHostName(clientMetrics.getHostName())<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return userLoadBldr.build();<a name="line.1764"></a>
+<span class="sourceLineNo">1723</span><a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    if (regionLoadBldr == null) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    if (regionSpecifier == null) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>      .setStores(stores)<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      .setStorefiles(storefiles)<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>      .setStoreRefCount(storeRefCount)<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      .setDataLocality(dataLocality)<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span><a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    return regionLoadBldr.build();<a name="line.1764"></a>
 <span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
 <span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  }<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span><a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  /**<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>   */<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private final HRegionServer instance;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    private final int majorCompactPriority;<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    // immediately upon region server startup<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    private long iteration = 1;<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      this.instance = h;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      /* MajorCompactPriority is configurable.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>       * If not set, the compaction will use default priority.<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>       */<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              DEFAULT_PRIORITY);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
+<span class="sourceLineNo">1767</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>    userLoadBldr.setUserName(user);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>            .setHostName(clientMetrics.getHostName())<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    return userLoadBldr.build();<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>  }<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span><a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>  /**<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>   */<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    private final HRegionServer instance;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    private final int majorCompactPriority;<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    // immediately upon region server startup<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    private long iteration = 1;<a name="line.1794"></a>
 <span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    protected void chore() {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        // Skip compaction if region is read only<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>        if (r == null || r.isReadOnly()) {<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          continue;<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>        }<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        HRegion hr = (HRegion) r;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        for (HStore s : hr.stores.values()) {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          try {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            assert multiplier &gt; 0;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>            if (iteration % multiplier != 0) {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>              continue;<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            if (s.needsCompaction()) {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>                getName() + " requests compaction");<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>              s.triggerMajorCompaction();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>                    getName() + " requests major compaction; use default priority",<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                    Store.NO_PRIORITY,<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>              } else {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>              }<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>            }<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>          } catch (IOException e) {<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>          }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        }<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>  }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span><a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    private final HRegionServer server;<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    private final long rangeOfDelayMs;<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span><a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      this.server = server;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span><a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span><a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    @Override<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    protected void chore() {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        if (r == null) continue;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>          if (requester != null) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>                  randomDelay);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>            }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>          }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      }<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>  }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  /**<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * method is designed mostly to be useful in tests.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   *<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>   * @return true if online, false if not.<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   */<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>  public boolean isOnline() {<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    return online.get();<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  }<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span><a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  /**<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * be hooked up to WAL.<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   */<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>  private void setupWALAndReplication() throws IOException {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>    WALFactory factory =<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span><a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      LOG.debug("logDir={}", logDir);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      if (this.walFs.exists(logDir)) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        throw new RegionServerRunningException(<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      // region servers.<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        factory.getWALProvider());<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    }<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>    this.walFactory = factory;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  /**<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>   * Start up replication source and sink handlers.<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>   */<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  private void startReplicationService() throws IOException {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        this.replicationSourceHandler != null) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } else {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      if (this.replicationSourceHandler != null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      if (this.replicationSinkHandler != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span><a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  /**<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>   * @return Master address tracker instance.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   */<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    return this.masterAddressTracker;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>  }<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span><a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>  /**<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>   * registered with the Master.<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>   * hosting server. Worker logs the exception and exits.<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>   */<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>  private void startServices() throws IOException {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      initializeThreads();<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    this.secureBulkLoadManager.start();<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span><a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    // Health checker thread.<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    if (isHealthCheckerConfigured()) {<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    // Executor status collect thread.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span><a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    this.walRoller = new LogRoller(this);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span><a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    int cleanerInterval =<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    this.compactedFileDischarger =<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span><a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    // Start executor services<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    // Start the threads for compacted files discharger<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    }<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span><a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        uncaughtExceptionHandler);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>    if (this.cacheFlusher != null) {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2029"></a>
+<span class="sourceLineNo">1796</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      this.instance = h;<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span><a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      /* MajorCompactPriority is configurable.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>       * If not set, the compaction will use default priority.<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>       */<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>              DEFAULT_PRIORITY);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    @Override<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    protected void chore() {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        // Skip compaction if region is read only<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        if (r == null || r.isReadOnly()) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>          continue;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        HRegion hr = (HRegion) r;<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>        for (HStore s : hr.stores.values()) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          try {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>            assert multiplier &gt; 0;<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>            if (iteration % multiplier != 0) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>              continue;<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>            }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>            if (s.needsCompaction()) {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>                getName() + " requests compaction");<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>              s.triggerMajorCompaction();<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>                    getName() + " requests major compaction; use default priority",<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>                    Store.NO_PRIORITY,<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>              } else {<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>              }<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            }<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>          } catch (IOException e) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    private final HRegionServer server;<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    private final long rangeOfDelayMs;<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      this.server = server;<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span><a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    @Override<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    protected void chore() {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        if (r == null) continue;<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          if (requester != null) {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>                  randomDelay);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>            }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>          }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>        }<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      }<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    }<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  }<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>  /**<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * method is designed mostly to be useful in tests.<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   * @return true if online, false if not.<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   */<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public boolean isOnline() {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    return online.get();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>  }<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span><a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>  /**<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * be hooked up to WAL.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   */<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>  private void setupWALAndReplication() throws IOException {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    WALFactory factory =<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span><a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      LOG.debug("logDir={}", logDir);<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (this.walFs.exists(logDir)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new RegionServerRunningException(<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      // region servers.<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        factory.getWALProvider());<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>    }<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    this.walFactory = factory;<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>  }<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span><a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>  /**<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>   * Start up replication source and sink handlers.<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>   */<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  private void startReplicationService() throws IOException {<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    } else {<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      if (this.replicationSourceHandler != null) {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      if (this.replicationSinkHandler != null) {<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    }<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  }<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span><a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  /**<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>   * @return Master address tracker instance.<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>   */<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    return this.masterAddressTracker;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>  }<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span><a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>  /**<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>   * registered with the Master.<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>   * hosting server. Worker logs the exception and exits.<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>   */<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>  private void startServices() throws IOException {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>      initializeThreads();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>    }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>    this.secureBulkLoadManager.start();<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    // Health checker thread.<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>    if (isHealthCheckerConfigured()) {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    // Executor status collect thread.<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span><a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    this.walRoller = new LogRoller(this);<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    int cleanerInterval =<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    this.compactedFileDischarger =<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span><a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // Start executor services<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>    // Start the threads for compacted files discharger<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    if (this.compactionChecker != null) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      choreService.scheduleChore(compactionChecker);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>    }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    if (this.periodicFlusher != null) {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    if (this.healthCheckChore != null) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2041"></a>
+<span class="sourceLineNo">2031</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>        uncaughtExceptionHandler);<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    if (this.cacheFlusher != null) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2041"></a>
 <span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    if (this.executorStatusChore != null) {<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    if (this.nonceManagerChore != null) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2047"></a>
+<span class="sourceLineNo">2043</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    if (this.compactionChecker != null) {<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>      choreService.scheduleChore(compactionChecker);<a name="line.2047"></a>
 <span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    if (this.storefileRefresher != null) {<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2050"></a>
+<span class="sourceLineNo">2049</span>    if (this.periodicFlusher != null) {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2050"></a>
 <span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    if (this.fsUtilizationChore != null) {<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2053"></a>
+<span class="sourceLineNo">2052</span>    if (this.healthCheckChore != null) {<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2053"></a>
 <span class="sourceLineNo">2054</span>    }<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2056"></a>
+<span class="sourceLineNo">2055</span>    if (this.executorStatusChore != null) {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2056"></a>
 <span class="sourceLineNo">2057</span>    }<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span><a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    // an unhandled exception, it will just exit.<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        uncaughtExceptionHandler);<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    // Create the log splitting worker and start it<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      splitLogWorker.start();<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>      LOG.debug("SplitLogWorker started");<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>    }<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span><a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>    // Memstore services.<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    startHeapMemoryManager();<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    // Call it after starting HeapMemoryManager.<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    initializeMemStoreChunkCreator();<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  }<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>  private void initializeThreads() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    // Cache flushing thread.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span><a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    // Compaction thread<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span><a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>    if (isSlowLogTableEnabled) {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>      // default chore duration: 10 min<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span><a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    if (this.nonceManager != null) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span><a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // Setup the Quota Manager<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    }<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span><a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    boolean onlyMetaRefresh = false;<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (storefileRefreshPeriod == 0) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      onlyMetaRefresh = true;<a name="line.2131"></a>
+<span class="sourceLineNo">2058</span>    if (this.nonceManagerChore != null) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>    }<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>    if (this.storefileRefresher != null) {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>    }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>    if (this.fsUtilizationChore != null) {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    }<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    // an unhandled exception, it will just exit.<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        uncaughtExceptionHandler);<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>    // Create the log splitting worker and start it<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>      splitLogWorker.start();<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      LOG.debug("SplitLogWorker started");<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span><a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    // Memstore services.<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>    startHeapMemoryManager();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>    // Call it after starting HeapMemoryManager.<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    initializeMemStoreChunkCreator();<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span><a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>  private void initializeThreads() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    // Cache flushing thread.<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span><a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>    // Compaction thread<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span><a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span><a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    if (isSlowLogTableEnabled) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>      // default chore duration: 10 min<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    if (this.nonceManager != null) {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>    }<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span><a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>    // Setup the Quota Manager<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span><a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>          onlyMetaRefresh, this, this);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    }<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    registerConfigurationObservers();<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span><a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>  private void registerConfigurationObservers() {<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    configurationManager.registerObserver(this);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>  }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  /**<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>   * Puts up the webui.<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>   */<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>  private void putUpWebUI() throws IOException {<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>    if(this instanceof HMaster) {<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    // -1 is for disabling info server<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    if (port &lt; 0) {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      return;<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>      String msg =<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          "Failed to start http info server. Address " + addr<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>      LOG.error(msg);<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      throw new IOException(msg);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    // check if auto port bind enabled<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    while (true) {<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>      try {<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>        configureInfoServer();<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        this.infoServer.start();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        break;<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      } catch (BindException e) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        if (!auto) {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          // auto bind disabled throw BindException<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          throw e;<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>        // auto bind enabled, try to use another port<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>        port++;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    port = this.infoServer.getPort();<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>  }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span><a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  /*<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>   * Verify that server is healthy<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   */<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  private boolean isHealthy() {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    if (!dataFsOk) {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      // File system problem<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return false;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>    // Verify that all threads are alive<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    if (!healthy) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    return healthy;<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  }<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span><a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  @Override<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    return walFactory.getWALs();<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>  }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span><a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  @Override<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    if (this.walRoller != null) {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>      this.walRoller.addWAL(wal);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return wal;<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>  }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span><a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>  public LogRoller getWalRoller() {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    return walRoller;<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span><a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  WALFactory getWalFactory() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return walFactory;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  @Override<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  public Connection getConnection() {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    return getAsyncConnection().toConnection();<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  @Override<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>  public void stop(final String msg) {<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>  }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span><a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>  /**<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>   * Stops the regionserver.<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * @param msg Status message<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * @param force True if this is a regionserver abort<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   */<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    if (!this.stopped) {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      if (this.rsHost != null) {<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        // when forced via abort don't allow CPs to override<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>        try {<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>          this.rsHost.preStop(msg, user);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>        } catch (IOException ioe) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>          if (!force) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>            return;<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>          }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      this.stopped = true;<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      LOG.info("STOPPED: " + msg);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      // Wakes run() if it is sleeping<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      sleeper.skipSleepCycle();<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public void waitForServerOnline(){<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      synchronized (online) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        try {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>          online.wait(msgInterval);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>        } catch (InterruptedException ie) {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>          Thread.currentThread().interrupt();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>          break;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>        }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      }<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span><a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>  @Override<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    HRegion r = context.getRegion();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>    long openProcId = context.getOpenProcId();<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    rpcServices.checkOpen();<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>    // Skip compaction check if region is read only<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>    if (!r.isReadOnly()) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      for (HStore s : r.stores.values()) {<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>        }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      }<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      LOG.error(<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      openSeqNum = 0;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>    }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // Notify master<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      throw new IOException(<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    }<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span><a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    triggerFlushInPrimaryRegion(r);<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span><a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span><a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    boolean onlyMetaRefresh = false;<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    if (storefileRefreshPeriod == 0) {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      onlyMetaRefresh = true;<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    }<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>          onlyMetaRefresh, this, this);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    registerConfigurationObservers();<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>  }<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span><a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>  private void registerConfigurationObservers() {<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>    configurationManager.registerObserver(this);<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  }<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span><a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>  /**<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>   * Puts up the webui.<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>   */<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  private void putUpWebUI() throws IOException {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span><a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    if(this instanceof HMaster) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>    }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>    // -1 is for disabling info server<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    if (port &lt; 0) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      return;<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span><a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      String msg =<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          "Failed to start http info server. Address " + addr<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>      LOG.error(msg);<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>      throw new IOException(msg);<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>    }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    // check if auto port bind enabled<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    while (true) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      try {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>        configureInfoServer();<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>        this.infoServer.start();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>        break;<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      } catch (BindException e) {<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>        if (!auto) {<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>          // auto bind disabled throw BindException<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>          throw e;<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>        }<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>        // auto bind enabled, try to use another port<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        port++;<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    }<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>    port = this.infoServer.getPort();<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span><a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  /*<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   * Verify that server is healthy<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>   */<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>  private boolean isHealthy() {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    if (!dataFsOk) {<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      // File system problem<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      return false;<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    // Verify that all threads are alive<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>    if (!healthy) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>    return healthy;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  }<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span><a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>  @Override<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>    return walFactory.getWALs();<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span><a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>  @Override<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>    if (this.walRoller != null) {<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      this.walRoller.addWAL(wal);<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    }<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    return wal;<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>  }<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span><a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>  public LogRoller getWalRoller() {<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>    return walRoller;<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>  }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span><a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>  WALFactory getWalFactory() {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>    return walFactory;<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>  }<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span><a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>  @Override<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>  public Connection getConnection() {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    return getAsyncConnection().toConnection();<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  @Override<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>  public void stop(final String msg) {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Stops the regionserver.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param msg Status message<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @param force True if this is a regionserver abort<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   */<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    if (!this.stopped) {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      if (this.rsHost != null) {<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>        // when forced via abort don't allow CPs to override<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>        try {<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>          this.rsHost.preStop(msg, user);<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>        } catch (IOException ioe) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>          if (!force) {<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>            return;<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>          }<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>        }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>      }<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      this.stopped = true;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      LOG.info("STOPPED: " + msg);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      // Wakes run() if it is sleeping<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      sleeper.skipSleepCycle();<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>    }<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>  }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span><a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  public void waitForServerOnline(){<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      synchronized (online) {<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        try {<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>          online.wait(msgInterval);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>        } catch (InterruptedException ie) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>          Thread.currentThread().interrupt();<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          break;<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>        }<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    }<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span><a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  @Override<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    HRegion r = context.getRegion();<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>    long openProcId = context.getOpenProcId();<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>    rpcServices.checkOpen();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>    // Skip compaction check if region is read only<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    if (!r.isReadOnly()) {<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      for (HStore s : r.stores.values()) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>        }<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      }<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>      LOG.error(<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      openSeqNum = 0;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>    }<a name="line.2329"></a>
 <span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>  /**<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>   * around to receive it.<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>   */<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>    final TransitionCode code = context.getCode();<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>    final RegionInfo[] hris = context.getHris();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span><a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>    if (code == TransitionCode.OPENED) {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>      if (hris[0].isMetaRegion()) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        try {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>        } catch (KeeperException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>          LOG.info("Failed to update meta location", e);<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          return false;<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      } else {<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>        try {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        } catch (IOException e) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>          LOG.info("Failed to update meta", e);<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>          return false;<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        }<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    return true;<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>      final RegionStateTransitionContext context) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    final TransitionCode code = context.getCode();<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    final RegionInfo[] hris = context.getHris();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    final long[] procIds = context.getProcIds();<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span><a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    transition.setTransitionCode(code);<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>    }<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    for (RegionInfo hri: hris) {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    for (long procId: procIds) {<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>      transition.addProcId(procId);<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span><a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    return builder.build();<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>  }<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span><a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  @Override<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>      return skipReportingTransition(context);<a name="line.2392"></a>
+<span class="sourceLineNo">2331</span>    // Notify master<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>      throw new IOException(<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    }<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    triggerFlushInPrimaryRegion(r);<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span><a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>  }<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span><a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>  /**<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>   * around to receive it.<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>   */<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>    final TransitionCode code = context.getCode();<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    final RegionInfo[] hris = context.getHris();<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span><a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>    if (code == TransitionCode.OPENED) {<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>      if (hris[0].isMetaRegion()) {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>        try {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        } catch (KeeperException e) {<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>          LOG.info("Failed to update meta location", e);<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>          return false;<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>        }<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      } else {<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>        try {<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>        } catch (IOException e) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>          LOG.info("Failed to update meta", e);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>          return false;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>        }<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>      }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    }<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>    return true;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>  }<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span><a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>      final RegionStateTransitionContext context) {<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    final TransitionCode code = context.getCode();<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    final RegionInfo[] hris = context.getHris();<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    final long[] procIds = context.getProcIds();<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span><a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    transition.setTransitionCode(code);<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    }<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    for (RegionInfo hri: hris) {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>    }<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    final ReportRegionStateTransitionRequest request =<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>        createReportRegionStateTransitionRequest(context);<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    final long initPauseTime = 1000;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    int tries = 0;<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    long pauseTime;<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>    // HRegionServer does down.<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      try {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        if (rss == null) {<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>          createRegionServerStatusStub();<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>          continue;<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        }<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>        ReportRegionStateTransitionResponse response =<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>          rss.reportRegionStateTransition(null, request);<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>        if (response.hasErrorMessage()) {<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          break;<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        }<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>        }<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>        // NOTE: Return mid-method!!!<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>        return true;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>      } catch (ServiceException se) {<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        boolean pause =<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        if (pause) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          // Do backoff else we flood the Master with requests.<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>        } else {<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>          pauseTime = initPauseTime; // Reset.<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>        }<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        LOG.info("Failed report transition " +<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            (pause?<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>                " immediately."),<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>            ioe);<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        tries++;<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        if (rssStub == rss) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>          rssStub = null;<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>        }<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>      }<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>    }<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    return false;<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>  }<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span><a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>  /**<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>   */<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      return;<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>          region.conf)) {<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      region.setReadsEnabled(true);<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>      return;<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    }<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span><a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span><a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    if (this.executorService != null) {<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>    } else {<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>        region.getRegionInfo());<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>     }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>  }<a name="line.2476"></a>
+<span class="sourceLineNo">2394</span>    for (long procId: procIds) {<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>      transition.addProcId(procId);<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>    return builder.build();<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>  }<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span><a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  @Override<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>      return skipReportingTransition(context);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    final ReportRegionStateTransitionRequest request =<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>        createReportRegionStateTransitionRequest(context);<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span><a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>    final long initPauseTime = 1000;<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    int tries = 0;<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    long pauseTime;<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>    // HRegionServer does down.<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>      try {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>        if (rss == null) {<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>          createRegionServerStatusStub();<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>          continue;<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>        }<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>        ReportRegionStateTransitionResponse response =<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>          rss.reportRegionStateTransition(null, request);<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>        if (response.hasErrorMessage()) {<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>          break;<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>        }<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>        }<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>        // NOTE: Return mid-method!!!<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>        return true;<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>      } catch (ServiceException se) {<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>        boolean pause =<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>        if (pause) {<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>          // Do backoff else we flood the Master with requests.<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>        } else {<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>          pauseTime = initPauseTime; // Reset.<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>        }<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>        LOG.info("Failed report transition " +<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>            (pause?<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>                " immediately."),<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>            ioe);<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>        tries++;<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>        if (rssStub == rss) {<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>          rssStub = null;<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>        }<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      }<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>    }<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>    return false;<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>  }<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span><a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>  /**<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>   */<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>      return;<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>    }<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>          region.conf)) {<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>      region.setReadsEnabled(true);<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>      return;<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>    }<a name="line.2476"></a>
 <span class="sourceLineNo">2477</span><a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>  @Override<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>  public RpcServerInterface getRpcServer() {<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    return rpcServices.rpcServer;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>  }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>  @VisibleForTesting<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>  public RSRpcServices getRSRpcServices() {<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    return rpcServices;<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>  }<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span><a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>  /**<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>   *<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>   * @param reason<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>   *          the reason we are aborting<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>   * @param cause<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>   *          the exception that caused the abort, or null<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>   */<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>  @Override<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>  public void abort(String reason, Throwable cause) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    if (!setAbortRequested()) {<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      // Abort already in progress, ignore the new request.<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>      LOG.debug(<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      return;<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    }<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    if (cause != null) {<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    } else {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>    }<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>    try {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span><a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>    try {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (cause != null) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      }<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      // Report to the master but only if we have already registered with the master.<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>        builder.setErrorMessage(msg);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    } catch (Throwable t) {<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span><a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>    scheduleAbortTimer();<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>    // shutdown should be run as the internal user<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>    stop(reason, true, null);<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>  }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>  /**<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>   * Sets the abort state if not already set.<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>   * progress.<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>   */<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>  protected boolean setAbortRequested() {<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    return abortRequested.compareAndSet(false, true);<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>  }<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span><a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>  /**<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>   */<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>  public void abort(String reason) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>    abort(reason, null);<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>  }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>  @Override<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>  public boolean isAborted() {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    return abortRequested.get();<a name="line.2565"></a>
+<span class="sourceLineNo">2478</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span><a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>    if (this.executorService != null) {<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>    } else {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>        region.getRegionInfo());<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>     }<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>  }<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span><a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>  @Override<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>  public RpcServerInterface getRpcServer() {<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    return rpcServices.rpcServer;<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>  }<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span><a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>  @VisibleForTesting<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>  public RSRpcServices getRSRpcServices() {<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    return rpcServices;<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  }<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span><a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>  /**<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>   *<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>   * @param reason<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>   *          the reason we are aborting<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>   * @param cause<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>   *          the exception that caused the abort, or null<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>   */<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>  @Override<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  public void abort(String reason, Throwable cause) {<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>    if (!setAbortRequested()) {<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>      // Abort already in progress, ignore the new request.<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>      LOG.debug(<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>      return;<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    }<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>    if (cause != null) {<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>    } else {<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>    }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    try {<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>    }<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span><a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>    try {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>      if (cause != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      // Report to the master but only if we have already registered with the master.<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>        builder.setErrorMessage(msg);<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>      }<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>    } catch (Throwable t) {<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span><a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    scheduleAbortTimer();<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>    // shutdown should be run as the internal user<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>    stop(reason, true, null);<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>  }<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span><a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>  /**<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>   * Sets the abort state if not already set.<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>   * progress.<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>   */<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>  protected boolean setAbortRequested() {<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    return abortRequested.compareAndSet(false, true);<a name="line.2565"></a>
 <span class="sourceLineNo">2566</span>  }<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span><a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>  /*<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>   * hostname+port immediately.<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>   */<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>  @VisibleForTesting<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>  protected void kill() {<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>    this.killed = true;<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>    abort("Simulated kill");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>  }<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span><a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>  // Limits the time spent in the shutdown process.<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>  private void scheduleAbortTimer() {<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    if (this.abortMonitor == null) {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      TimerTask abortTimeoutTask = null;<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      try {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>        timerTaskCtor.setAccessible(true);<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      } catch (Exception e) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>      }<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      if (abortTimeoutTask != null) {<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      }<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>    }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>  }<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span><a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  /**<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>   * have already been called.<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>   */<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>  protected void stopServiceThreads() {<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>    // clean up the scheduled chores<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    if (this.choreService != null) {<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      choreService.cancelChore(compactionChecker);<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      choreService.cancelChore(periodicFlusher);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>      choreService.cancelChore(healthCheckChore);<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>      choreService.cancelChore(executorStatusChore);<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>      choreService.cancelChore(storefileRefresher);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      choreService.shutdown();<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span><a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>    if (this.cacheFlusher != null) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>      this.cacheFlusher.join();<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>    }<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span><a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    if (this.spanReceiverHost != null) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>      this.spanReceiverHost.closeReceivers();<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>    }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    if (this.walRoller != null) {<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      this.walRoller.close();<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>    }<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    if (this.compactSplitThread != null) {<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      this.compactSplitThread.join();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    if (this.executorService != null) this.executorService.shutdown();<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        this.replicationSourceHandler == this.replicationSinkHandler) {<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>    } else {<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      if (this.replicationSourceHandler != null) {<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>      }<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      if (this.replicationSinkHandler != null) {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>      }<a name="line.2641"></a>
+<span class="sourceLineNo">2568</span>  /**<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>   */<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>  public void abort(String reason) {<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    abort(reason, null);<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>  }<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span><a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>  @Override<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>  public boolean isAborted() {<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>    return abortRequested.get();<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>  }<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span><a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>  /*<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>   * hostname+port immediately.<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>   */<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>  @VisibleForTesting<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>  protected void kill() {<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    this.killed = true;<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    abort("Simulated kill");<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>  }<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span><a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>  // Limits the time spent in the shutdown process.<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>  private void scheduleAbortTimer() {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>    if (this.abortMonitor == null) {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>      TimerTask abortTimeoutTask = null;<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      try {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>        timerTaskCtor.setAccessible(true);<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>      } catch (Exception e) {<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>      }<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>      if (abortTimeoutTask != null) {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>      }<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>    }<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>  }<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span><a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>  /**<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>   * have already been called.<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>   */<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>  protected void stopServiceThreads() {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>    // clean up the scheduled chores<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    if (this.choreService != null) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>      choreService.cancelChore(compactionChecker);<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      choreService.cancelChore(periodicFlusher);<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>      choreService.cancelChore(healthCheckChore);<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>      choreService.cancelChore(executorStatusChore);<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>      choreService.cancelChore(storefileRefresher);<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>      choreService.shutdown();<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>    }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>    if (this.cacheFlusher != null) {<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>      this.cacheFlusher.join();<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    }<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span><a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>    if (this.spanReceiverHost != null) {<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>      this.spanReceiverHost.closeReceivers();<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>    }<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>    if (this.walRoller != null) {<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>      this.walRoller.close();<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    }<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    if (this.compactSplitThread != null) {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>      this.compactSplitThread.join();<a name="line.2641"></a>
 <span class="sourceLineNo">2642</span>    }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span><a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>  /**<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>   * @return Return the object that implements the replication<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>   * source executorService.<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>   */<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>  @Override<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    return replicationSourceHandler;<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>  }<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span><a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>  /**<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>   */<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    return replicationSinkHandler;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>  }<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span><a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>  /**<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>   * Method will block until a master is available. You can break from this<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>   * block by requesting the server stop.<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>   *<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>   * @return master + port, or null if server has been stopped<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>   */<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    return createRegionServerStatusStub(false);<a name="line.2671"></a>
+<span class="sourceLineNo">2643</span>    if (this.executorService != null) {<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      this.executorService.shutdown();<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    }<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    } else {<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>      if (this.replicationSourceHandler != null) {<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>      }<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>      if (this.replicationSinkHandler != null) {<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>      }<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>    }<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  }<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>  /**<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>   * @return Return the object that implements the replication<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>   * source executorService.<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>   */<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>  @Override<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    return replicationSourceHandler;<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>  }<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span><a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>  /**<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>   */<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    return replicationSinkHandler;<a name="line.2671"></a>
 <span class="sourceLineNo">2672</span>  }<a name="line.2672"></a>
 <span class="sourceLineNo">2673</span><a name="line.2673"></a>
 <span class="sourceLineNo">2674</span>  /**<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   * You can break from this block by requesting the server stop.<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   * @return master + port, or null if server has been stopped<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>  @VisibleForTesting<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (rssStub != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      return masterAddressTracker.getMasterAddress();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    ServerName sn = null;<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>    long previousLogTime = 0;<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>    boolean interrupted = false;<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>    try {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      while (keepLooping()) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>        if (sn == null) {<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>          if (!keepLooping()) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>            // give up with no connection.<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>            return null;<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>          }<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>            LOG.debug("No master found; retry");<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>            previousLogTime = System.currentTimeMillis();<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>          }<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>          if (sleepInterrupted(200)) {<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>            interrupted = true;<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>          }<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>          continue;<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        }<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span><a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>        // If we are on the active master, use the shortcut<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>          break;<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>        }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        try {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>          BlockingRpcChannel channel =<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>              shortOperationTimeout);<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          break;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        } catch (IOException e) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            e = e instanceof RemoteException ?<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>            } else {<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>            }<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>            previousLogTime = System.currentTimeMillis();<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          }<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          if (sleepInterrupted(200)) {<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>            interrupted = true;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>          }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>        }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      }<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>      if (interrupted) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        Thread.currentThread().interrupt();<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    }<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    this.rssStub = intRssStub;<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>    this.lockStub = intLockStub;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    return sn;<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>  }<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span><a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>  /**<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>   * @return True if we should break loop because cluster is going down or<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>   */<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>  private boolean keepLooping() {<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  /*<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>   * us by the master.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * null if we failed to register.<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @throws IOException<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>    if (masterServerName == null || rss == null) return null;<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    RegionServerStartupResponse result = null;<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>    try {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>      rpcServices.requestCount.reset();<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      int port = rpcServices.isa.getPort();<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      }<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>      request.setPort(port);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      request.setServerStartCode(this.startcode);<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      request.setServerCurrentTime(now);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    } catch (ServiceException se) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>            ioe);<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        // Re-throw IOE will cause RS to abort<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>        throw ioe;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        LOG.debug("Master is not running yet");<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>      } else {<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>        LOG.warn("error telling master we are up", se);<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>      }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      rssStub = null;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>    }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    return result;<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>  @Override<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>    try {<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      if (rss == null) { // Try to connect one more time<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>        createRegionServerStatusStub();<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>        rss = rssStub;<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>        if (rss == null) {<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>          // Still no luck, we tried<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>              .build();<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>        }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    } catch (ServiceException e) {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>          .build();<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>  }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span><a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>  /**<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>   * Close meta region if we carry it<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>   * @param abort Whether we're running an abort.<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>   */<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    HRegion meta = null;<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>    try {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>        if (hri.isMetaRegion()) {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>          meta = e.getValue();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>        }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>        if (meta != null) break;<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>      }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    } finally {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>  }<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span><a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>  /**<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   * Schedule closes on all user regions.<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>   * that are already closed or that are closing.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>   * @param abort Whether we're running an abort.<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>   */<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>  private void closeUserRegions(final boolean abort) {<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>    try {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        HRegion r = e.getValue();<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>          // Don't update zk with this close transition; pass false.<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>        }<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>      }<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>    } finally {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  /** @return the info server */<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public InfoServer getInfoServer() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return infoServer;<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * @return true if a stop has been requested.<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   */<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>  @Override<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>  public boolean isStopped() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>    return this.stopped;<a name="line.2887"></a>
+<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>   * Method will block until a master is available. You can break from this<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   * block by requesting the server stop.<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   *<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   * @return master + port, or null if server has been stopped<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   */<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>    return createRegionServerStatusStub(false);<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span><a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>  /**<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>   * You can break from this block by requesting the server stop.<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>   * @return master + port, or null if server has been stopped<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  @VisibleForTesting<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    if (rssStub != null) {<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      return masterAddressTracker.getMasterAddress();<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>    ServerName sn = null;<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    long previousLogTime = 0;<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    boolean interrupted = false;<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>    try {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>      while (keepLooping()) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>        if (sn == null) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>          if (!keepLooping()) {<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>            // give up with no connection.<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>            return null;<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>          }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>            LOG.debug("No master found; retry");<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>            previousLogTime = System.currentTimeMillis();<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>          }<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>          if (sleepInterrupted(200)) {<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            interrupted = true;<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>          }<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>          continue;<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>        }<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>        // If we are on the active master, use the shortcut<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          break;<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>        }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>        try {<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          BlockingRpcChannel channel =<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>              shortOperationTimeout);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>          break;<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>        } catch (IOException e) {<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>            e = e instanceof RemoteException ?<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>            } else {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>            }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>            previousLogTime = System.currentTimeMillis();<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>          }<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (sleepInterrupted(200)) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            interrupted = true;<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>        }<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>      }<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>    } finally {<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>      if (interrupted) {<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        Thread.currentThread().interrupt();<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    this.rssStub = intRssStub;<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>    this.lockStub = intLockStub;<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    return sn;<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>  }<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span><a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>  /**<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>   * @return True if we should break loop because cluster is going down or<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>   */<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  private boolean keepLooping() {<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>  }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span><a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  /*<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>   * us by the master.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>   * null if we failed to register.<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>   * @throws IOException<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>   */<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>    if (masterServerName == null || rss == null) return null;<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    RegionServerStartupResponse result = null;<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    try {<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>      rpcServices.requestCount.reset();<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      int port = rpcServices.isa.getPort();<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>      }<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      request.setPort(port);<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>      request.setServerStartCode(this.startcode);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>      request.setServerCurrentTime(now);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>    } catch (ServiceException se) {<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>            ioe);<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>        // Re-throw IOE will cause RS to abort<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>        throw ioe;<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>        LOG.debug("Master is not running yet");<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      } else {<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>        LOG.warn("error telling master we are up", se);<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      }<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>      rssStub = null;<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>    }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    return result;<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>    try {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>      if (rss == null) { // Try to connect one more time<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>        createRegionServerStatusStub();<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>        rss = rssStub;<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>        if (rss == null) {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>          // Still no luck, we tried<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>              .build();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>        }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      }<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>    } catch (ServiceException e) {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>          .build();<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    }<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span><a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>   * Close meta region if we carry it<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>   * @param abort Whether we're running an abort.<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>   */<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>    HRegion meta = null;<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>    try {<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>        if (hri.isMetaRegion()) {<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>          meta = e.getValue();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>        if (meta != null) break;<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      }<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    } finally {<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    }<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>  }<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span><a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>  /**<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   * Schedule closes on all user regions.<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>   * that are already closed or that are closing.<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>   * @param abort Whether we're running an abort.<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>   */<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  private void closeUserRegions(final boolean abort) {<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>    try {<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>        HRegion r = e.getValue();<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>          // Don't update zk with this close transition; pass false.<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>        }<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    } finally {<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>    }<a name="line.2887"></a>
 <span class="sourceLineNo">2888</span>  }<a name="line.2888"></a>
 <span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>  @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  public boolean isStopping() {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>    return this.stopping;<a name="line.2892"></a>
+<span class="sourceLineNo">2890</span>  /** @return the info server */<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>  public InfoServer getInfoServer() {<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>    return infoServer;<a name="line.2892"></a>
 <span class="sourceLineNo">2893</span>  }<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>  @Override<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public Configuration getConfiguration() {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    return conf;<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>  }<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span><a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    return this.onlineRegions;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>  public int getNumberOfOnlineRegions() {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    return this.onlineRegions.size();<a name="line.2905"></a>
+<span class="sourceLineNo">2895</span>  /**<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>   * @return true if a stop has been requested.<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>   */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>  @Override<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>  public boolean isStopped() {<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    return this.stopped;<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>  }<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span><a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>  @Override<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>  public boolean isStopping() {<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    return this.stopping;<a name="line.2905"></a>
 <span class="sourceLineNo">2906</span>  }<a name="line.2906"></a>
 <span class="sourceLineNo">2907</span><a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  /**<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>   * For tests, web ui and metrics.<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>   */<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    return Collections.unmodifiableCollection(regions);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  }<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span><a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>  @Override<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>  public void addRegion(HRegion region) {<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>    configurationManager.registerObserver(region);<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  }<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span><a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>      long size) {<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    }<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    sortedRegions.get(size).add(region);<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  /**<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>   *   the biggest.<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    // we'll sort the regions in reverse<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2940"></a>
+<span class="sourceLineNo">2908</span>  @Override<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  public Configuration getConfiguration() {<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    return conf;<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  }<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span><a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>    return this.onlineRegions;<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>  }<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span><a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>  public int getNumberOfOnlineRegions() {<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    return this.onlineRegions.size();<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>  }<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span><a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>  /**<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>   * For tests, web ui and metrics.<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>    return Collections.unmodifiableCollection(regions);<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>  }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span><a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  @Override<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>  public void addRegion(HRegion region) {<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    configurationManager.registerObserver(region);<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  }<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>      long size) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2940"></a>
 <span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>    return sortedRegions;<a name="line.2942"></a>
+<span class="sourceLineNo">2942</span>    sortedRegions.get(size).add(region);<a name="line.2942"></a>
 <span class="sourceLineNo">2943</span>  }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>  /**<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>   *   biggest.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    // we'll sort the regions in reverse<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>    }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>    return sortedRegions;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>  }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span><a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  /**<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>   * @return time stamp in millis of when this region server was started<a name="line.2960"></a>
+<span class="sourceLineNo">2944</span>  /**<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>   *   the biggest.<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   */<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    // we'll sort the regions in reverse<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>    }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>    return sortedRegions;<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>  }<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span><a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  /**<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>   *   biggest.<a name="line.2960"></a>
 <span class="sourceLineNo">2961</span>   */<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>  public long getStartcode() {<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>    return this.startcode;<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>  }<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span><a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>  /** @return reference to FlushRequester */<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>  @Override<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>  public FlushRequester getFlushRequester() {<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    return this.cacheFlusher;<a name="line.2969"></a>
+<span class="sourceLineNo">2962</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>    // we'll sort the regions in reverse<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>    }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>    return sortedRegions;<a name="line.2969"></a>
 <span class="sourceLineNo">2970</span>  }<a name="line.2970"></a>
 <span class="sourceLineNo">2971</span><a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>  @Override<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    return this.compactSplitThread;<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>  }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span><a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  @Override<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  public LeaseManager getLeaseManager() {<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    return leaseManager;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>  /**<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @return Return the rootDir.<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   */<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>  protected Path getDataRootDir() {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>    return dataRootDir;<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  }<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span><a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>  @Override<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  public FileSystem getFileSystem() {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    return dataFs;<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span><a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  /**<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   */<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>  boolean isDataFileSystemOk() {<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>    return this.dataFsOk;<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>  }<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span><a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>  /**<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   * @return Return the walRootDir.<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>   */<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>  public Path getWALRootDir() {<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    return walRootDir;<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>  }<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span><a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>  /**<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>   * @return Return the walFs.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>   */<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  public FileSystem getWALFileSystem() {<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>    return walFs;<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>  }<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span><a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>  @Override<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>  public String toString() {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>    return getServerName().toString();<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>  }<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>  @Override<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>  public ZKWatcher getZooKeeper() {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    return zooKeeper;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span><a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  @Override<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>    return csm;<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>  }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span><a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>  @Override<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>  public ServerName getServerName() {<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>    return serverName;<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span><a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>    return this.rsHost;<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  }<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span><a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  @Override<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    return this.regionsInTransitionInRS;<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>  }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span><a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>  @Override<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>  public ExecutorService getExecutorService() {<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>    return executorService;<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span><a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  @Override<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>  public ChoreService getChoreService() {<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>    return choreService;<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>  }<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span><a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>  @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return rsQuotaManager;<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>  }<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span><a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>  //<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>  // Main program and support routines<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  //<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>   * Load the replication executorService objects, if any<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>    // read in the name of the source replication class from the config file.<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span><a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>    // read in the name of the sink replication class from the config file.<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>    // only one object.<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>    } else {<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>    }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>  }<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span><a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      throw new IOException("Could not find class for " + classname);<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    }<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    return service;<a name="line.3101"></a>
+<span class="sourceLineNo">2972</span>  /**<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   * @return time stamp in millis of when this region server was started<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   */<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  public long getStartcode() {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>    return this.startcode;<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>  }<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span><a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>  /** @return reference to FlushRequester */<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>  @Override<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>  public FlushRequester getFlushRequester() {<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return this.cacheFlusher;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  @Override<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>    return this.compactSplitThread;<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>  }<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span><a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>  @Override<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>  public LeaseManager getLeaseManager() {<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    return leaseManager;<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * @return Return the rootDir.<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   */<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  protected Path getDataRootDir() {<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    return dataRootDir;<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>  }<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span><a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  @Override<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  public FileSystem getFileSystem() {<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>    return dataFs;<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  }<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span><a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>  /**<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   */<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  boolean isDataFileSystemOk() {<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    return this.dataFsOk;<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span><a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>   * @return Return the walRootDir.<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>   */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  public Path getWALRootDir() {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    return walRootDir;<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  }<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>  /**<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * @return Return the walFs.<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>  public FileSystem getWALFileSystem() {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    return walFs;<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>  }<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span><a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>  @Override<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  public String toString() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    return getServerName().toString();<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>  }<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span><a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>  @Override<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>  public ZKWatcher getZooKeeper() {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    return zooKeeper;<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span><a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>    return csm;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>  }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public ServerName getServerName() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    return serverName;<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    return this.rsHost;<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>  }<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span><a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>  @Override<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    return this.regionsInTransitionInRS;<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>  }<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span><a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  @Override<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public ExecutorService getExecutorService() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    return executorService;<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  }<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  @Override<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>  public ChoreService getChoreService() {<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    return choreService;<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  }<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span><a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>  @Override<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>    return rsQuotaManager;<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  }<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span><a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>  //<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>  // Main program and support routines<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  //<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>  /**<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   * Load the replication executorService objects, if any<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>   */<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>    // read in the name of the source replication class from the config file.<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span><a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    // read in the name of the sink replication class from the config file.<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span><a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    // only one object.<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>      server.sameReplicationSourceAndSink = true;<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>    } else {<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>      server.sameReplicationSourceAndSink = false;<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
 <span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
 <span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>    if(!this.isOnline()){<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>      return walGroupsReplicationStatus;<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>    }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>    }<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    return walGroupsReplicationStatus;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>  }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>  /**<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   */<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>  static HRegionServer constructRegionServer(<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      final Configuration conf<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>  ) {<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    try {<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      return c.newInstance(conf);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>    } catch (Exception e) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>          + regionServerClass.toString(), e);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>    }<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>  }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span><a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>  /**<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>   */<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>  public static void main(String[] args) {<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>    VersionInfo.logVersion();<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    @SuppressWarnings("unchecked")<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  }<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span><a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>  /**<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>   * Gets the online regions of the specified table.<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>   * all the ONLINE regions in the table.<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>   * @param tableName table to limit the scope of the query<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>   */<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>  @Override<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>     synchronized (this.onlineRegions) {<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>           tableRegions.add(region);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>         }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>       }<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>     }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>     return tableRegions;<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>   }<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span><a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>  @Override<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    List&lt;HRegion&gt; allRegions;<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>    synchronized (this.onlineRegions) {<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>      // Return a clone copy of the onlineRegions<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    }<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>    return allRegions;<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>  }<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span><a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>  /**<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   * Gets the online tables in this RS.<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * This method looks at the in-memory onlineRegions.<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return all the online tables in this RS<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   */<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    synchronized (this.onlineRegions) {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      }<a name="line.3193"></a>
+<span class="sourceLineNo">3104</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>    try {<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>      throw new IOException("Could not find class for " + classname);<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>    }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    return service;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>  }<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span><a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    if(!this.isOnline()){<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      return walGroupsReplicationStatus;<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>    }<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    }<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    return walGroupsReplicationStatus;<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>  }<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span><a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>  /**<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>   */<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>  static HRegionServer constructRegionServer(<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      final Configuration conf<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>  ) {<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>    try {<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>      return c.newInstance(conf);<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    } catch (Exception e) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          + regionServerClass.toString(), e);<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span><a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>  /**<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>   */<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>  public static void main(String[] args) {<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    VersionInfo.logVersion();<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>    @SuppressWarnings("unchecked")<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span><a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>  }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>  /**<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>   * Gets the online regions of the specified table.<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>   * all the ONLINE regions in the table.<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>   * @param tableName table to limit the scope of the query<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>   */<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>  @Override<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>     synchronized (this.onlineRegions) {<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>           tableRegions.add(region);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>         }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>       }<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>     }<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>     return tableRegions;<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>   }<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span><a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>  @Override<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    List&lt;HRegion&gt; allRegions;<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>    synchronized (this.onlineRegions) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>      // Return a clone copy of the onlineRegions<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3193"></a>
 <span class="sourceLineNo">3194</span>    }<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    return tables;<a name="line.3195"></a>
+<span class="sourceLineNo">3195</span>    return allRegions;<a name="line.3195"></a>
 <span class="sourceLineNo">3196</span>  }<a name="line.3196"></a>
 <span class="sourceLineNo">3197</span><a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>  public String[] getRegionServerCoprocessors() {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    try {<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>    } catch (IOException exception) {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>          "skipping.");<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>    }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    for (HRegion region: regions) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>      try {<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      } catch (IOException exception) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>            "; skipping.");<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>      }<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>    }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>    return coprocessors.toArray(new String[0]);<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>  }<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span><a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>  /**<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>   * @param region Region to close<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>   */<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>    try {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>            " - ignoring and continuing");<a name="line.3230"></a>
+<span class="sourceLineNo">3198</span>  /**<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>   * Gets the online tables in this RS.<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>   * This method looks at the in-memory onlineRegions.<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>   * @return all the online tables in this RS<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>   */<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>    synchronized (this.onlineRegions) {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      }<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>    }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>    return tables;<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>  }<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span><a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>  public String[] getRegionServerCoprocessors() {<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>    try {<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>    } catch (IOException exception) {<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>          "skipping.");<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>    }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    for (HRegion region: regions) {<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>      try {<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span>      } catch (IOException exception) {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>            "; skipping.");<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3230"></a>
 <span class="sourceLineNo">3231</span>      }<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    } catch (IOException e) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>          " - ignoring and continuing", e);<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    }<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  /**<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>   *<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>   * &lt;p&gt;<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>   * &lt;/p&gt;<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span><a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>   * &lt;p&gt;<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>   * &lt;/p&gt;<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>   *<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>   * @param encodedName Region to close<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>   * @param abort True if we are aborting<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>   * @return True if closed a region.<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>   * @throws NotServingRegionException if the region is not online<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>   */<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>        final ServerName destination)<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>      throws NotServingRegionException {<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>    //Check for permissions to close.<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>    // Can be null if we're calling close on a region that's not online<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>      try {<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>      } catch (IOException exp) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>        return false;<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>      }<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    }<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span><a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>    // previous can come back 'null' if not in map.<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>        Boolean.FALSE);<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span><a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>        // We're going to try to do a standard close then.<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>            " Doing a standard close now");<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>        return closeRegion(encodedName, abort, destination);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>      }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>      // Let's get the region from the online region list again<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>      actualRegion = this.getRegion(encodedName);<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>        // The master deletes the znode when it receives this exception.<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>      }<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>    } else if (previous == null) {<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      return true;<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>    }<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span><a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>    if (actualRegion == null) {<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>      // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>          " is not online, and is not opening.");<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>    }<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span><a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>    CloseRegionHandler crh;<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>    if (hri.isMetaRegion()) {<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>    } else {<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>    }<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>    this.executorService.submit(crh);<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    return true;<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span><a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>   /**<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>   *         named region is not member of the online regions.<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>   */<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>  }<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span><a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>  @Override<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>  }<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span><a name="line.3334"></a>
+<span class="sourceLineNo">3232</span>    }<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>    return coprocessors.toArray(new String[0]);<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>  }<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span><a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>  /**<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>   * @param region Region to close<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>   */<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    try {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>            " - ignoring and continuing");<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>      }<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>    } catch (IOException e) {<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>          " - ignoring and continuing", e);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>    }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>  }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span><a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>  /**<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>   *<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>   * &lt;p&gt;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>   * &lt;/p&gt;<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span><a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * &lt;p&gt;<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>   * &lt;/p&gt;<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>   *<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * @param encodedName Region to close<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * @param abort True if we are aborting<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>   * @return True if closed a region.<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>   * @throws NotServingRegionException if the region is not online<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>   */<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>        final ServerName destination)<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>      throws NotServingRegionException {<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>    //Check for permissions to close.<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>    // Can be null if we're calling close on a region that's not online<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>      try {<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>      } catch (IOException exp) {<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>        return false;<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>      }<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    }<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span><a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>    // previous can come back 'null' if not in map.<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>        Boolean.FALSE);<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span><a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>        // We're going to try to do a standard close then.<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>            " Doing a standard close now");<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>        return closeRegion(encodedName, abort, destination);<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>      }<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>      // Let's get the region from the online region list again<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>      actualRegion = this.getRegion(encodedName);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>        // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>      }<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    } else if (previous == null) {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>      return true;<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>    }<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span><a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>    if (actualRegion == null) {<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>      // The master deletes the znode when it receives this exception.<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>          " is not online, and is not opening.");<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>    }<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span><a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>    CloseRegionHandler crh;<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>    if (hri.isMetaRegion()) {<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>    } else {<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    }<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    this.executorService.submit(crh);<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>    return true;<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>  }<a name="line.3334"></a>
 <span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>  @Override<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>    if (destination != null) {<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>      }<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>      if (selfMove) {<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>      }<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    }<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>    configurationManager.deregisterObserver(r);<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>    return toReturn != null;<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>  }<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span><a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>  /**<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>   *<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>   */<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      throws NotServingRegionException {<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  }<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span><a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>      throws NotServingRegionException {<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>  }<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span><a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>    throws NotServingRegionException {<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>    if (region == null) {<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>      if (moveInfo != null) {<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>      }<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>      String regionNameStr = regionName == null?<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>          " is opening on " + this.serverName);<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>      }<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>        " is not online on " + this.serverName);<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>    }<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return region;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  /**<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>   * IOE if it isn't already.<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>   *<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>   * @param t Throwable<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>   * @param msg Message to log in error. Can be null.<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>   */<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>    if (t instanceof NotServingRegionException) {<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>      return t;<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>    }<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>    if (msg == null) {<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>      LOG.error("", e);<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>    } else {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>      LOG.error(msg, e);<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    }<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      checkFileSystem();<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>    }<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>    return t;<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>  }<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span><a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  /**<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>   */<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>  }<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span><a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>  /**<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * abortRequested and stopRequested<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   *<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @return false if file system is not available<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   */<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>  boolean checkFileSystem() {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>      try {<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>      } catch (IOException e) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>        abort("File System not available", e);<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>        this.dataFsOk = false;<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      }<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>    }<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>    return this.dataFsOk;<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>  }<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span><a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>  @Override<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>          favoredNodes.get(i).getPort());<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>  }<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span><a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>  /**<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>   *<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>   * @return array of favored locations<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>   */<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>  @Override<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span><a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  @Override<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>  public ServerNonceManager getNonceManager() {<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>    return this.nonceManager;<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>  }<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span><a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  private static class MovedRegionInfo {<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>    private final ServerName serverName;<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>    private final long seqNum;<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span><a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>      this.serverName = serverName;<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>      this.seqNum = closeSeqNum;<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>     }<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span><a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>    public ServerName getServerName() {<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>      return serverName;<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>    }<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span><a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>    public long getSeqNum() {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      return seqNum;<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>    }<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>  }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span><a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>  /**<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>   * the number of network calls instead of reducing them.<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>   */<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3501"></a>
+<span class="sourceLineNo">3336</span>   /**<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>   *         named region is not member of the online regions.<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>   */<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>  }<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span><a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>  @Override<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>  }<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span><a name="line.3349"></a>
+<span class="sourceLineNo">3350</span><a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>  @Override<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    if (destination != null) {<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      }<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>      if (selfMove) {<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>    }<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>    configurationManager.deregisterObserver(r);<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>    return toReturn != null;<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>  }<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span><a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>  /**<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   *<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   */<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>      throws NotServingRegionException {<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  }<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span><a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      throws NotServingRegionException {<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>  }<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span><a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>    throws NotServingRegionException {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    if (region == null) {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>      if (moveInfo != null) {<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>      }<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>      String regionNameStr = regionName == null?<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>          " is opening on " + this.serverName);<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>      }<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>        " is not online on " + this.serverName);<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>    }<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>    return region;<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>  }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span><a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>  /**<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>   * IOE if it isn't already.<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>   *<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>   * @param t Throwable<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>   * @param msg Message to log in error. Can be null.<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>   */<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    if (t instanceof NotServingRegionException) {<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>      return t;<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>    }<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>    if (msg == null) {<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>      LOG.error("", e);<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>    } else {<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>      LOG.error(msg, e);<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>    }<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>      checkFileSystem();<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>    }<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>    return t;<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>  }<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span><a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>  /**<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   */<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>  }<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span><a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>  /**<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>   * abortRequested and stopRequested<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>   *<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>   * @return false if file system is not available<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>   */<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>  boolean checkFileSystem() {<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>      try {<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      } catch (IOException e) {<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>        abort("File System not available", e);<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>        this.dataFsOk = false;<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>      }<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>    }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>    return this.dataFsOk;<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>  }<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span><a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>  @Override<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>          favoredNodes.get(i).getPort());<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    }<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>  }<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span><a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>  /**<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   *<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   * @return array of favored locations<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>   */<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>  @Override<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>  }<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span><a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>  @Override<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>  public ServerNonceManager getNonceManager() {<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>    return this.nonceManager;<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>  }<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span><a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>  private static class MovedRegionInfo {<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>    private final ServerName serverName;<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    private final long seqNum;<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span><a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>      this.serverName = serverName;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>      this.seqNum = closeSeqNum;<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>     }<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span><a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>    if (selfMove) {<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>      return;<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>    }<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>        closeSeqNum);<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span><a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>  }<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span><a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>  @VisibleForTesting<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>  }<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span><a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>  @VisibleForTesting<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>  public int movedRegionCacheExpiredTime() {<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>        return TIMEOUT_REGION_MOVED;<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>  }<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span><a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>  private String getMyEphemeralNodePath() {<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>  }<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span><a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>  private boolean isHealthCheckerConfigured() {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>  }<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span><a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>  /**<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>   */<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>  public CompactSplit getCompactSplitThread() {<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>    return this.compactSplitThread;<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>  }<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span><a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>    try {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>      String serviceName = call.getServiceName();<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>      if (service == null) {<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>            serviceName);<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>      }<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>      ServiceDescriptor serviceDesc =<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>          service.getDescriptorForType();<a name="line.3556"></a>
+<span class="sourceLineNo">3503</span>    public ServerName getServerName() {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>      return serverName;<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>    }<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span><a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>    public long getSeqNum() {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>      return seqNum;<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>    }<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span><a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>   * the number of network calls instead of reducing them.<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span><a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>    if (selfMove) {<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>      return;<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>    }<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>        closeSeqNum);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>  }<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span><a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>  }<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span><a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  @VisibleForTesting<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>  }<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span><a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>  @VisibleForTesting<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>  public int movedRegionCacheExpiredTime() {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        return TIMEOUT_REGION_MOVED;<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>  }<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  private String getMyEphemeralNodePath() {<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>  }<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span><a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>  private boolean isHealthCheckerConfigured() {<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>  }<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span><a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>  /**<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>   */<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>  public CompactSplit getCompactSplitThread() {<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>    return this.compactSplitThread;<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>  }<a name="line.3556"></a>
 <span class="sourceLineNo">3557</span><a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>      String methodName = call.getMethodName();<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>      MethodDescriptor methodDesc =<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>          serviceDesc.findMethodByName(methodName);<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>      if (methodDesc == null) {<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>            " called on executorService " + serviceName);<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>      }<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span><a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>      Message request =<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>      final Message.Builder responseBuilder =<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>        if (message != null) {<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>          responseBuilder.mergeFrom(message);<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>        }<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      });<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>      if (exception != null) {<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>        throw exception;<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>      }<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>    } catch (IOException ie) {<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>      throw new ServiceException(ie);<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>    }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>  }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span><a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>  /**<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>   * May be null if this is a master which not carry table.<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>   *<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>   * @return The block cache instance used by the regionserver.<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>   */<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>  @Override<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>    return Optional.ofNullable(this.blockCache);<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>  }<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span><a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>  /**<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>   * May be null if this is a master which not carry table.<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>   *<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>   * @return The cache for mob files used by the regionserver.<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>   */<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>  @Override<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>  }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span><a name="line.3604"></a>
+<span class="sourceLineNo">3558</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>    try {<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>      String serviceName = call.getServiceName();<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>      if (service == null) {<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>            serviceName);<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>      }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>      ServiceDescriptor serviceDesc =<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>          service.getDescriptorForType();<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span><a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>      String methodName = call.getMethodName();<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>      MethodDescriptor methodDesc =<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>          serviceDesc.findMethodByName(methodName);<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>      if (methodDesc == null) {<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>            " called on executorService " + serviceName);<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>      }<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span><a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>      Message request =<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>      final Message.Builder responseBuilder =<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>        if (message != null) {<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>          responseBuilder.mergeFrom(message);<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>        }<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      });<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      if (exception != null) {<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>        throw exception;<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>      }<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>    } catch (IOException ie) {<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>      throw new ServiceException(ie);<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>    }<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  }<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span><a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>  /**<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>   * May be null if this is a master which not carry table.<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>   *<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>   * @return The block cache instance used by the regionserver.<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>   */<a name="line.3604"></a>
 <span class="sourceLineNo">3605</span>  @Override<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>  public AccessChecker getAccessChecker() {<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>    return rpcServices.getAccessChecker();<a name="line.3607"></a>
+<span class="sourceLineNo">3606</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>    return Optional.ofNullable(this.blockCache);<a name="line.3607"></a>
 <span class="sourceLineNo">3608</span>  }<a name="line.3608"></a>
 <span class="sourceLineNo">3609</span><a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>  @Override<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>  }<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span><a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>  /**<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>   */<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>  @VisibleForTesting<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>  ConfigurationManager getConfigurationManager() {<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    return configurationManager;<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>  }<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span><a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>  /**<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>   * @return Return table descriptors implementation.<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>   */<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>  @Override<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>  public TableDescriptors getTableDescriptors() {<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    return this.tableDescriptors;<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>  }<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span><a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  /**<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>   * Reload the configuration from disk.<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>   */<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>  void updateConfiguration() {<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>    // Reload the configuration from disk.<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>    conf.reloadConfiguration();<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>    configurationManager.notifyAllObservers(conf);<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>  }<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span><a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>    long evictedBlocks = 0;<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span><a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>    for(Store store : region.getStores()) {<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>      }<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>    }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span><a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>    return CacheEvictionStats.builder()<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>        .build();<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>  }<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span><a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>  @Override<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>  public double getCompactionPressure() {<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>    double max = 0;<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    for (Region region : onlineRegions.values()) {<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>      for (Store store : region.getStores()) {<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>        double normCount = store.getCompactionPressure();<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>        if (normCount &gt; max) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>          max = normCount;<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>        }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>      }<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>    }<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>    return max;<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>  }<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span><a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>  @Override<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>    return hMemManager;<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>  }<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span><a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    return cacheFlusher;<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span><a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>  /**<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>   * For testing<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>   */<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>  @VisibleForTesting<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>  public boolean walRollRequestFinished() {<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    return this.walRoller.walRollFinished();<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>  }<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span><a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>  @Override<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>  public ThroughputController getFlushThroughputController() {<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>    return flushThroughputController;<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  }<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span><a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>  @Override<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>  public double getFlushPressure() {<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>      // return 0 during RS initialization<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>      return 0.0;<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    }<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span>  }<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span><a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>  @Override<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>    ThroughputController old = this.flushThroughputController;<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>    if (old != null) {<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>      old.stop("configuration change");<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>    }<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>    try {<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      Superusers.initialize(newConf);<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>    } catch (IOException e) {<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3711"></a>
+<span class="sourceLineNo">3610</span>  /**<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>   * May be null if this is a master which not carry table.<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>   *<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>   * @return The cache for mob files used by the regionserver.<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>   */<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>  @Override<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>  }<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span><a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>  @Override<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>  public AccessChecker getAccessChecker() {<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    return rpcServices.getAccessChecker();<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>  }<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span><a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>  @Override<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>  }<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span><a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>  /**<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>   */<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>  @VisibleForTesting<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  ConfigurationManager getConfigurationManager() {<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>    return configurationManager;<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>  }<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span><a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>  /**<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>   * @return Return table descriptors implementation.<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>   */<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>  @Override<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>  public TableDescriptors getTableDescriptors() {<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    return this.tableDescriptors;<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>  }<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span><a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>  /**<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>   * Reload the configuration from disk.<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>   */<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>  void updateConfiguration() {<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>    // Reload the configuration from disk.<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>    conf.reloadConfiguration();<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>    configurationManager.notifyAllObservers(conf);<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>  }<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span><a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>    long evictedBlocks = 0;<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span><a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    for(Store store : region.getStores()) {<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>      }<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    }<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span><a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>    return CacheEvictionStats.builder()<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>        .build();<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>  }<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span><a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>  @Override<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>  public double getCompactionPressure() {<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>    double max = 0;<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>    for (Region region : onlineRegions.values()) {<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>      for (Store store : region.getStores()) {<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        double normCount = store.getCompactionPressure();<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>        if (normCount &gt; max) {<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span>          max = normCount;<a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>        }<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      }<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>    return max;<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>  }<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span><a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>  @Override<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>    return hMemManager;<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>  }<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span><a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    return cacheFlusher;<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  /**<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>   * For testing<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>   */<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>  @VisibleForTesting<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>  public boolean walRollRequestFinished() {<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>    return this.walRoller.walRollFinished();<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>  }<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span><a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>  @Override<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>  public ThroughputController getFlushThroughputController() {<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>    return flushThroughputController;<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span><a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>  @Override<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  public double getFlushPressure() {<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>      // return 0 during RS initialization<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      return 0.0;<a name="line.3711"></a>
 <span class="sourceLineNo">3712</span>    }<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>  }<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span><a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>  @Override<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>  public MetricsRegionServer getMetrics() {<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>    return metricsRegionServer;<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>  }<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span><a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>  @Override<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>    return this.secureBulkLoadManager;<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>  }<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span><a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>  @Override<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      final Abortable abort) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>    final LockServiceClient client =<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>  }<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span><a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>  @Override<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>  }<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span><a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>  @Override<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>    return this.rsSpaceQuotaManager;<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>  }<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span><a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>  @Override<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>      // the current server could be stopping.<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>      return false;<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>    }<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>    try {<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>      rss.reportFileArchival(null, request);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>    } catch (ServiceException se) {<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>        if (LOG.isTraceEnabled()) {<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>              + " This will be retried.", ioe);<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>        }<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>        return false;<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>      }<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>      if (rssStub == rss) {<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>        rssStub = null;<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>      }<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>      // re-create the stub if we failed to report the archival<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>      createRegionServerStatusStub(true);<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>      return false;<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>    }<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>    return true;<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>  }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>    return eventLoopGroupConfig;<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>  }<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span><a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>  @Override<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>  }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span><a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>  }<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span><a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>    procedureResultReporter.complete(procId, error);<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>  }<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span><a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>    for (;;) {<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>      rss = rssStub;<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>      if (rss != null) {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>        break;<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>      }<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>      createRegionServerStatusStub();<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>    }<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>    try {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>      rss.reportProcedureDone(null, request);<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>    } catch (ServiceException se) {<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>      if (rssStub == rss) {<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>        rssStub = null;<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>      }<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>    }<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>  }<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span><a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>  /**<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>   *<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>   *<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>   *<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>   * See HBASE-22404 for more details.<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>   *<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>   * @param procId the id of the open/close region procedure<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>   * @return true if the procedure can be submitted.<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>   */<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>  boolean submitRegionProcedure(long procId) {<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>    if (procId == -1) {<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      return true;<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>    }<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>    // Ignore the region procedures which already submitted.<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>    if (previous != null) {<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>      return false;<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>    }<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>    // Ignore the region procedures which already executed.<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>      return false;<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>    }<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>    return true;<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>  }<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span><a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>  /**<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>   * @param procId the id of the open/close region procedure<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>   */<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span>  public void finishRegionProcedure(long procId) {<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>    executedRegionProcedures.put(procId, procId);<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>    submittedRegionProcedures.remove(procId);<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>  }<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span><a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>  public boolean isShutDown() {<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>    return shutDown;<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>  }<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span><a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>  /**<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>   * Force to terminate region server when abort timeout.<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>   */<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span><a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>    public SystemExitWhenAbortTimeout() {<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>    }<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span><a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>    @Override<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>    public void run() {<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>          " Thread dump to stdout.");<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>      Runtime.getRuntime().halt(1);<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>    }<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>  }<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span><a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>  @Override<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>    return asyncClusterConnection;<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>  }<a name="line.3885"></a>
+<span class="sourceLineNo">3713</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  }<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span><a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    ThroughputController old = this.flushThroughputController;<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>    if (old != null) {<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>      old.stop("configuration change");<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>    }<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    try {<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>      Superusers.initialize(newConf);<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    } catch (IOException e) {<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    }<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>  }<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span><a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>  @Override<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>  public MetricsRegionServer getMetrics() {<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span>    return metricsRegionServer;<a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>  }<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span><a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>  @Override<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>    return this.secureBulkLoadManager;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>  }<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span><a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>  @Override<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>      final Abortable abort) {<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>    final LockServiceClient client =<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>  }<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span><a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>  @Override<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>  }<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span><a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>  @Override<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>    return this.rsSpaceQuotaManager;<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>  }<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span><a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>  @Override<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>      // the current server could be stopping.<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>      return false;<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>    }<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>    try {<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>      rss.reportFileArchival(null, request);<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>    } catch (ServiceException se) {<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        if (LOG.isTraceEnabled()) {<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>              + " This will be retried.", ioe);<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>        }<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>        return false;<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>      if (rssStub == rss) {<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>        rssStub = null;<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      }<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>      // re-create the stub if we failed to report the archival<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>      createRegionServerStatusStub(true);<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>      return false;<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    }<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>    return true;<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span><a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>    return eventLoopGroupConfig;<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>  }<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span><a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  @Override<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>  }<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span><a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>  }<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span><a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>    procedureResultReporter.complete(procId, error);<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>  }<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span><a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>    for (;;) {<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>      rss = rssStub;<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      if (rss != null) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>        break;<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>      }<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>      createRegionServerStatusStub();<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>    }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span>    try {<a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>      rss.reportProcedureDone(null, request);<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>    } catch (ServiceException se) {<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>      if (rssStub == rss) {<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>        rssStub = null;<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span>      }<a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>    }<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>  }<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span><a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>  /**<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>   *<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>   *<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>   *<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>   * See HBASE-22404 for more details.<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>   *<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>   * @param procId the id of the open/close region procedure<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>   * @return true if the procedure can be submitted.<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>   */<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>  boolean submitRegionProcedure(long procId) {<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>    if (procId == -1) {<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>      return true;<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>    }<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>    // Ignore the region procedures which already submitted.<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>    if (previous != null) {<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span>      return false;<a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>    }<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>    // Ignore the region procedures which already executed.<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>      return false;<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span>    }<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>    return true;<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>  }<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span><a name="line.3865"></a>
+<span class="sourceLineNo">3866</span>  /**<a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>   * @param procId the id of the open/close region procedure<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>   */<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>  public void finishRegionProcedure(long procId) {<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>    executedRegionProcedures.put(procId, procId);<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span>    submittedRegionProcedures.remove(procId);<a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>  }<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span><a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>  public boolean isShutDown() {<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>    return shutDown;<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  }<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span><a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  /**<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span>   * Force to terminate region server when abort timeout.<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>   */<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span><a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>    public SystemExitWhenAbortTimeout() {<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>    }<a name="line.3885"></a>
 <span class="sourceLineNo">3886</span><a name="line.3886"></a>
-<span class="sourceLineNo">3887</span>  @VisibleForTesting<a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>    return compactedFileDischarger;<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>  }<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>}<a name="line.3891"></a>
+<span class="sourceLineNo">3887</span>    @Override<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span>    public void run() {<a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>          " Thread dump to stdout.");<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>      Runtime.getRuntime().halt(1);<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>    }<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>  }<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span><a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>  @Override<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span>    return asyncClusterConnection;<a name="line.3899"></a>
+<span class="sourceLineNo">3900</span>  }<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span><a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>  @VisibleForTesting<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>    return compactedFileDischarger;<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>  }<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>}<a name="line.3906"></a>
 
 
 
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 b694c3c..7f9cc0d 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
@@ -309,3594 +309,3609 @@
 <span class="sourceLineNo">301</span>  // Replication services. If no replication, this handler will be null.<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  // Compactions<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * encoded region name.  All access should be synchronized.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<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>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and here we really mean DataNode locations.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private LeaseManager leaseManager;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Instance of the hbase executor executorService.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected ExecutorService executorService;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private volatile boolean dataFsOk;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private HFileSystem dataFs;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private HFileSystem walFs;<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // Set when a report to the master comes back with a message asking us to<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  // of HRegionServer in isolation.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private volatile boolean stopped = false;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // debugging and unit tests.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private AtomicBoolean abortRequested;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // Default abort timeout is 1200 seconds for safe<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  // Will run this task when abort timeout<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // space regions.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private boolean stopping = false;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  private volatile boolean killed = false;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private volatile boolean shutDown = false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  protected final Configuration conf;<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private Path dataRootDir;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private Path walRootDir;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private final int threadWakeFrequency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  final int msgInterval;<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  private final int compactionCheckFrequency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int flushCheckFrequency;<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  // Stub to do region server status calls against the master.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private RpcClient rpcClient;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  // into web context.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  protected InfoServer infoServer;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private JvmPauseMonitor pauseMonitor;<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>  /** region server process name */<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public static final String REGIONSERVER = "regionserver";<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">304</span>  private boolean sameReplicationSourceAndSink;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // Compactions<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * encoded region name.  All access should be synchronized.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * and here we really mean DataNode locations.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private LeaseManager leaseManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  // Instance of the hbase executor executorService.<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  protected ExecutorService executorService;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private volatile boolean dataFsOk;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private HFileSystem dataFs;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private HFileSystem walFs;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  // Set when a report to the master comes back with a message asking us to<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  // of HRegionServer in isolation.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  private volatile boolean stopped = false;<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  // debugging and unit tests.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  private AtomicBoolean abortRequested;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  // Default abort timeout is 1200 seconds for safe<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  // Will run this task when abort timeout<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  // space regions.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  private boolean stopping = false;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  private volatile boolean killed = false;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean shutDown = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  protected final Configuration conf;<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  private Path dataRootDir;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private Path walRootDir;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private final int threadWakeFrequency;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  final int msgInterval;<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private final int compactionCheckFrequency;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private final int flushCheckFrequency;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  // Stub to do region server status calls against the master.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RpcClient rpcClient;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  // into web context.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  protected InfoServer infoServer;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private JvmPauseMonitor pauseMonitor;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  /** region server process name */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public static final String REGIONSERVER = "regionserver";<a name="line.388"></a>
 <span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private MetricsRegionServer metricsRegionServer;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private ScheduledChore periodicFlusher;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  private volatile WALFactory walFactory;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>  private LogRoller walRoller;<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  // A thread which calls reportProcedureDone<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // flag set after we're done setting up server threads<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // zookeeper connection and watcher<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  protected final ZKWatcher zooKeeper;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  // master address tracker<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  // Cluster Status Tracker<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // Log Splitting Worker<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private SplitLogWorker splitLogWorker;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  // A sleeper that sleeps for msgInterval.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected final Sleeper sleeper;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private final int shortOperationTimeout;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Block cache<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  private BlockCache blockCache;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  // The cache for mob files<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private MobFileCache mobFileCache;<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  /** The health check chore. */<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  private HealthCheckChore healthCheckChore;<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>  /** The Executor status collect chore. */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private ExecutorStatusChore executorStatusChore;<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  /** The nonce manager chore. */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  private ScheduledChore nonceManagerChore;<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * against Master.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  protected String useThisHostnameInstead;<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Exception will be thrown if both are used.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  protected String clusterId;<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  // chore for refreshing store files for secondary regions<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private StorefileRefresherChore storefileRefresher;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  private RegionServerCoprocessorHost rsHost;<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * HBASE-3787) are:<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>  final ServerNonceManager nonceManager;<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>  private UserProvider userProvider;<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  protected final RSRpcServices rpcServices;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  private CoordinatedStateManager csm;<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  /**<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   */<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  protected final ConfigurationManager configurationManager;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  @VisibleForTesting<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  private volatile ThroughputController flushThroughputController;<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Provide online slow log responses from ringbuffer<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  private NamedQueueRecorder namedQueueRecorder = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   */<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  private final boolean masterless;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  /**regionserver codec list **/<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  // A timer to shutdown the process if abort takes too long<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * &lt;p/&gt;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * Don't start any services or managers in here in the Constructor.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   */<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    super("RegionServer");  // thread name<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    TraceUtil.initTracer(conf);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    try {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      this.startcode = System.currentTimeMillis();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      this.conf = conf;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      this.dataFsOk = true;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      HFile.checkHFileVersion(this.conf);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      checkCodecs(this.conf);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>      // Disable usage of meta replicas in the regionserver<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      // Config'ed params<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.594"></a>
-<span class="sourceLineNo">595</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      this.stopped = false;<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>      initNamedQueueRecorder(conf);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      rpcServices = createRpcServices();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      String hostName =<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.604"></a>
-<span class="sourceLineNo">605</span>              : this.useThisHostnameInstead;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>      // login the zookeeper client principal (if using security)<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      // login the server principal (if using secure Hadoop)<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      login(userProvider, hostName);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // init superusers and add the server principal (if using security)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // or process owner as default super user.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Superusers.initialize(conf);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      boolean isMasterNotCarryTable =<a name="line.618"></a>
-<span class="sourceLineNo">619</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (!isMasterNotCarryTable) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        mobFileCache = new MobFileCache(conf);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>      uncaughtExceptionHandler =<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      initializeFileSystem();<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>      this.configurationManager = new ConfigurationManager();<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      // Open connection to zookeeper and set primary watcher<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        canCreateBaseZNode());<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      if (!this.masterless) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          this.csm = new ZkCoordinatedStateManager(this);<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>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        masterAddressTracker.start();<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        clusterStatusTracker.start();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      } else {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        masterAddressTracker = null;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        clusterStatusTracker = null;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.rpcServices.start(zooKeeper);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      // class HRS. TODO.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      this.choreService = new ChoreService(getName(), true);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      this.executorService = new ExecutorService(getName());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      putUpWebUI();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    } catch (Throwable t) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // cause of failed startup is lost.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.error("Failed construction RegionServer", t);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      throw t;<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>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    if (!(this instanceof HMaster)) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      if (isOnlineLogProviderEnabled) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    } else {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final boolean isBalancerDecisionRecording = conf<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      if (isBalancerDecisionRecording) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>  }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>  // HMaster should override this method to load the specific config for master<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        throw new IOException(msg);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      } else {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        return rpcServices.isa.getHostName();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    } else {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      return hostname;<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">709</span>   * If running on Windows, do windows-specific setup.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   */<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        conf.reloadConfiguration();<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        cm.notifyAllObservers(conf);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      });<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    NettyEventLoopGroupConfig nelgc =<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    return nelgc;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>  private void initializeFileSystem() throws IOException {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    // (unless all is set to defaults).<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<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>  protected void login(UserProvider user, String host) throws IOException {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Wait for an active Master.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * See override in Master superclass for how it is used.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  protected void waitForMasterActive() {}<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected String getProcessName() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return REGIONSERVER;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  protected boolean canCreateBaseZNode() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return this.masterless;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  protected boolean canUpdateTableDescriptor() {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    return false;<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  }<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    return new RSRpcServices(this);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span>  protected void configureInfoServer() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    return RSDumpServlet.class;<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  }<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>  @Override<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean registerService(Service instance) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    // No stacking of instances is allowed for a single executorService name<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        " already registered, rejecting request from " + instance);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      return false;<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>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    if (LOG.isDebugEnabled()) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      LOG.debug(<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    return true;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>  }<a name="line.803"></a>
-<span class="sourceLineNo">804</span><a name="line.804"></a>
-<span class="sourceLineNo">805</span>  private Configuration cleanupConfiguration() {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    Configuration conf = this.conf;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    //   masters' availability.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    //   other internal connections too.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.817"></a>
-<span class="sourceLineNo">818</span>      // the conf and unset the client ZK related properties<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      conf = new Configuration(this.conf);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return conf;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   */<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    // check to see if the codec list is available:<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    if (codecs == null) return;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (String codec : codecs) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        throw new IOException("Compression codec " + codec +<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          " not supported, aborting RS construction");<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      }<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    }<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  }<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>  public String getClusterId() {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    return this.clusterId;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>  /**<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * Setup our cluster connection if not already initialized.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   */<a name="line.846"></a>
-<span class="sourceLineNo">847</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (asyncClusterConnection == null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      Configuration conf = cleanupConfiguration();<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      User user = userProvider.getCurrent();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      asyncClusterConnection =<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  /**<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  private void preRegistrationInitialization() {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    try {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      initializeZooKeeper();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>      setupClusterConnection();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      // Setup RPC client for master communication<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    } catch (Throwable t) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      // Call stop if error or process will stick around for ever since server<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      // puts up non-daemon threads.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      this.rpcServices.stop();<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  /**<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Finally open long-living server short-circuit connection.<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   */<a name="line.881"></a>
-<span class="sourceLineNo">882</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    justification="cluster Id znode read would give us correct response")<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Nothing to do in here if no Master in the mix.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (this.masterless) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      return;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    // block until a master is available.  No point in starting up if no master<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    // running.<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    // when ready.<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    if (clusterId == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      // Retrieve clusterId<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      // Since cluster status is now up<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      // ID should have already been set by HMaster<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      try {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        if (clusterId == null) {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          this.abort("Cluster ID has not been set");<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>        LOG.info("ClusterId : " + clusterId);<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      } catch (KeeperException e) {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      }<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    }<a name="line.913"></a>
-<span class="sourceLineNo">914</span><a name="line.914"></a>
-<span class="sourceLineNo">915</span>    waitForMasterActive();<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    if (isStopped() || isAborted()) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      return; // No need for further initialization<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    }<a name="line.918"></a>
-<span class="sourceLineNo">919</span><a name="line.919"></a>
-<span class="sourceLineNo">920</span>    // watch for snapshots and other procedures<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    try {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      rspmHost.loadProcedures(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      rspmHost.initialize(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    } catch (KeeperException e) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.929"></a>
-<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.931"></a>
-<span class="sourceLineNo">932</span>   * if the region server is shut down<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   * @param tracker znode tracker to use<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   */<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.937"></a>
-<span class="sourceLineNo">938</span>      throws IOException, InterruptedException {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      if (this.stopped) {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      }<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  /**<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * @return True if the cluster is up.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>   */<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @Override<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  public boolean isClusterUp() {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    return this.masterless ||<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.952"></a>
-<span class="sourceLineNo">953</span>  }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>  /**<a name="line.955"></a>
-<span class="sourceLineNo">956</span>   * The HRegionServer sticks in this loop until closed.<a name="line.956"></a>
-<span class="sourceLineNo">957</span>   */<a name="line.957"></a>
-<span class="sourceLineNo">958</span>  @Override<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  public void run() {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (isStopped()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.info("Skipping run; stopped");<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>      preRegistrationInitialization();<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    } catch (Throwable e) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      abort("Fatal exception during initialization", e);<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    }<a name="line.969"></a>
-<span class="sourceLineNo">970</span><a name="line.970"></a>
-<span class="sourceLineNo">971</span>    try {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        // come up.<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        LOG.debug("About to register with Master.");<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        RetryCounterFactory rcf =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        RetryCounter rc = rcf.create();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        while (keepLooping()) {<a name="line.986"></a>
-<span class="sourceLineNo">987</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>          if (w == null) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.989"></a>
-<span class="sourceLineNo">990</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            this.sleeper.sleep(sleepTime);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>          } else {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>            handleReportForDutyResponse(w);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>            break;<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          }<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      }<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>        // start the snapshot handler and other procedure handlers,<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        // since the server is ready to run<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>        if (this.rspmHost != null) {<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          this.rspmHost.start();<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>        }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        // Start the Quota Manager<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>        if (this.rsQuotaManager != null) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          this.rsSpaceQuotaManager.start();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span><a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // We registered with the Master.  Go into run mode.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      long lastMsg = System.currentTimeMillis();<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      long oldRequestCount = -1;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // The main run loop.<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        if (!isClusterUp()) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>          if (onlineRegions.isEmpty()) {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>          } else if (!this.stopping) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>            this.stopping = true;<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>            LOG.info("Closing user regions");<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>            closeUserRegions(this.abortRequested.get());<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>          } else {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            if (allUserRegionsOffline) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              // Set stopped if no more write requests tp meta tables<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>              // since last time we went around the loop.  Any open<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>              // meta regions will be closed on our way out.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>                break;<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>              }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>              oldRequestCount = getWriteRequestCount();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>            } else {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>              // Make sure all regions have been closed -- some regions may<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>              // have not got it because we were splitting at the time of<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>              // the call to closeUserRegions.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>              closeUserRegions(this.abortRequested.get());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>        long now = System.currentTimeMillis();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          tryRegionServerReport(lastMsg, now);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          lastMsg = System.currentTimeMillis();<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>        }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>          this.sleeper.sleep();<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>        }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      } // for<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    } catch (Throwable t) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>        abort(prefix + t.getMessage(), t);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    if (this.leaseManager != null) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    if (this.splitLogWorker != null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>      splitLogWorker.stop();<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    if (this.infoServer != null) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.info("Stopping infoServer");<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      try {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>        this.infoServer.stop();<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      } catch (Exception e) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    }<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // Send cache a shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    if (blockCache != null) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      blockCache.shutdown();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (mobFileCache != null) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      mobFileCache.shutdown();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span><a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span><a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (rspmHost != null) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (this.killed) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    } else if (abortRequested.get()) {<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      if (this.dataFsOk) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      LOG.info("aborting server " + this.serverName);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    } else {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      closeUserRegions(abortRequested.get());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      LOG.info("stopping server " + this.serverName);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    if (this.asyncClusterConnection != null) {<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>      try {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>        this.asyncClusterConnection.close();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      } catch (IOException e) {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      }<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    }<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        if (this.compactSplitThread != null) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>          this.compactSplitThread.join();<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          this.compactSplitThread = null;<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    }<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    // Stop the quota manager<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    if (rsQuotaManager != null) {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsQuotaManager.stop();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    if (rsSpaceQuotaManager != null) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      rsSpaceQuotaManager.stop();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager = null;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    // flag may be changed when closing regions throws exception.<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    if (this.dataFsOk) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      shutdownWAL(!abortRequested.get());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    // Make sure the proxy is down.<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    if (this.rssStub != null) {<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      this.rssStub = null;<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    if (this.lockStub != null) {<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.lockStub = null;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>    if (this.rpcClient != null) {<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      this.rpcClient.close();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    }<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    if (this.leaseManager != null) {<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      this.leaseManager.close();<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    }<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (this.pauseMonitor != null) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.pauseMonitor.stop();<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    if (!killed) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      stopServiceThreads();<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    if (this.rpcServices != null) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      this.rpcServices.stop();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      deleteMyEphemeralNode();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      // pass<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    } catch (KeeperException e) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span><a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    if (this.zooKeeper != null) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      this.zooKeeper.close();<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.shutDown = true;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  private boolean containsMetaTableRegions() {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>  }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span><a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>  private boolean areAllUserRegionsOffline() {<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    boolean allUserRegionsOffline = true;<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        allUserRegionsOffline = false;<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        break;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      }<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    return allUserRegionsOffline;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span><a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>  /**<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   * @return Current write count for all online regions.<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>   */<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  private long getWriteRequestCount() {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    long writeCount = 0;<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    }<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    return writeCount;<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span><a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  @VisibleForTesting<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      throws IOException {<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>      return;<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      request.setLoad(sl);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      rss.regionServerReport(null, request.build());<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    } catch (ServiceException se) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // This will be caught and handled as a fatal error in run()<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        throw ioe;<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>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      // Method blocks until new master is found or we are stopped<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>      createRegionServerStatusStub(true);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    }<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  }<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span><a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   *<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * @param regionSizeStore The store containing region sizes<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>   */<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    if (rss == null) {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      // the current server could be stopping.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      return true;<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    try {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    } catch (ServiceException se) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>            + " This will be retried.", ioe);<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        return true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      if (rssStub == rss) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        rssStub = null;<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      createRegionServerStatusStub(true);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>            return false;<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return true;<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param rss The stub to send to the Master<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param regionSizeStore The store containing region sizes<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    RegionSpaceUseReportRequest request =<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    // Record the number of size reports sent<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    if (metricsRegionServer != null) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>  }<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span><a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  /**<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>   *<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * @param regionSizes The size in bytes of regions<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * @return The corresponding protocol buffer message.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   */<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    return request.build();<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span><a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  /**<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * protobuf message.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   *<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * @param regionInfo The RegionInfo<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>   * @return The protocol buffer<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   */<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    return RegionSpaceUse.newBuilder()<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        .build();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      throws IOException {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    // the wrapper to compute those numbers in one place.<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    // history.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    long usedMemory = -1L;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    long maxMemory = -1L;<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    if (usage != null) {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>      usedMemory = usage.getUsed();<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      maxMemory = usage.getMax();<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>    for (String coprocessor : coprocessors) {<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    for (HRegion region : regions) {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      if (region.getCoprocessorHost() != null) {<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>          .getCoprocessors()) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      }<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    if (this.infoServer != null) {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    } else {<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      serverLoad.setInfoServerPort(-1);<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>    }<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    MetricsUserAggregateSource userSource =<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    if (userSource != null) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      }<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    }<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    // either source or sink will get the same info<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    if (rsources != null) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      // always refresh first to get the latest value<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      if (rLoad != null) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS :<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            rLoad.getReplicationLoadSourceEntries()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>          serverLoad.addReplLoadSource(rLS);<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>    }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span><a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    return serverLoad.build();<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>  }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span><a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>    StringBuilder sb = new StringBuilder();<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>    }<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    return sb.toString();<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>  }<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span><a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>  /**<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>   * Wait on regions close.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   */<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    // Wait till all regions are closed before going out.<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    int lastCount = -1;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    long previousLogTime = 0;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>    boolean interrupted = false;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    try {<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      while (!onlineRegions.isEmpty()) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>        int count = getNumberOfOnlineRegions();<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        // Only print a message if the count of regions has changed.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>        if (count != lastCount) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>          // Log every second at most<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>            previousLogTime = System.currentTimeMillis();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>            lastCount = count;<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>            // Only print out regions still closing if a small number else will<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>            // swamp the log.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>            }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>          }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        // protect against the case where an open comes in after we start the<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        // iterator of onlineRegions to close all user regions.<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>            closedRegions.add(hri.getEncodedName());<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>            // Don't update zk with this close transition; pass false.<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>          }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        // No regions in RIT, we could stop waiting now.<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>          if (!onlineRegions.isEmpty()) {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>                " because some regions failed closing");<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>          }<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>          break;<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        } else {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>        }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        if (sleepInterrupted(200)) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>          interrupted = true;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        }<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      }<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    } finally {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      if (interrupted) {<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        Thread.currentThread().interrupt();<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>    boolean interrupted = false;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    try {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      Thread.sleep(millis);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>    } catch (InterruptedException e) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      LOG.warn("Interrupted while sleeping");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>      interrupted = true;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>    }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>    return interrupted;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  private void shutdownWAL(final boolean close) {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>    if (this.walFactory != null) {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>      try {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        if (close) {<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>          walFactory.close();<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        } else {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>          walFactory.shutdown();<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>        }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      } catch (Throwable e) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span><a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>   *<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>   * @return NamedQueueRecorder<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>   */<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    return this.namedQueueRecorder;<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>  /*<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>   *<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * @param c Extra configuration.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   */<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  throws IOException {<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    try {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      boolean updateRootDir = false;<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        String key = e.getName();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        // The hostname the master sees us as.<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>              this.startcode);<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>            LOG.error(msg);<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>            throw new IOException(msg);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            LOG.error(msg);<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>          }<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>          continue;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>        }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>        String value = e.getValue();<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            updateRootDir = true;<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>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        if (LOG.isDebugEnabled()) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        this.conf.set(key, value);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      createMyEphemeralNode();<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (updateRootDir) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        initializeFileSystem();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      }<a name="line.1568"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private MetricsRegionServer metricsRegionServer;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private ScheduledChore periodicFlusher;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  private volatile WALFactory walFactory;<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  private LogRoller walRoller;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  // A thread which calls reportProcedureDone<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  // flag set after we're done setting up server threads<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  // zookeeper connection and watcher<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  protected final ZKWatcher zooKeeper;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  // master address tracker<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  // Cluster Status Tracker<a name="line.426"></a>
+<span class="sourceLineNo">427</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  // Log Splitting Worker<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private SplitLogWorker splitLogWorker;<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>  // A sleeper that sleeps for msgInterval.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  protected final Sleeper sleeper;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  private final int shortOperationTimeout;<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  // Block cache<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  private BlockCache blockCache;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>  // The cache for mob files<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  private MobFileCache mobFileCache;<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  /** The health check chore. */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  private HealthCheckChore healthCheckChore;<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>  /** The Executor status collect chore. */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private ExecutorStatusChore executorStatusChore;<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>  /** The nonce manager chore. */<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private ScheduledChore nonceManagerChore;<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  /**<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * against Master.<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  protected String useThisHostnameInstead;<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>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Exception will be thrown if both are used.<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   */<a name="line.472"></a>
+<span class="sourceLineNo">473</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  protected String clusterId;<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>  // chore for refreshing store files for secondary regions<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private StorefileRefresherChore storefileRefresher;<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  private RegionServerCoprocessorHost rsHost;<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * HBASE-3787) are:<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  final ServerNonceManager nonceManager;<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>  private UserProvider userProvider;<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  protected final RSRpcServices rpcServices;<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>  private CoordinatedStateManager csm;<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  protected final ConfigurationManager configurationManager;<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  @VisibleForTesting<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  private volatile ThroughputController flushThroughputController;<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<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>   * Provide online slow log responses from ringbuffer<a name="line.541"></a>
+<span class="sourceLineNo">542</span>   */<a name="line.542"></a>
+<span class="sourceLineNo">543</span>  private NamedQueueRecorder namedQueueRecorder = 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>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.548"></a>
+<span class="sourceLineNo">549</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.550"></a>
+<span class="sourceLineNo">551</span>   */<a name="line.551"></a>
+<span class="sourceLineNo">552</span>  private final boolean masterless;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>  /**regionserver codec list **/<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // A timer to shutdown the process if abort takes too long<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * &lt;p/&gt;<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   * Don't start any services or managers in here in the Constructor.<a name="line.564"></a>
+<span class="sourceLineNo">565</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    super("RegionServer");  // thread name<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    TraceUtil.initTracer(conf);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      this.startcode = System.currentTimeMillis();<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.conf = conf;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.dataFsOk = true;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      HFile.checkHFileVersion(this.conf);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      checkCodecs(this.conf);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // Disable usage of meta replicas in the regionserver<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      // Config'ed params<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.595"></a>
+<span class="sourceLineNo">596</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      this.stopped = false;<a name="line.599"></a>
+<span class="sourceLineNo">600</span><a name="line.600"></a>
+<span class="sourceLineNo">601</span>      initNamedQueueRecorder(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      rpcServices = createRpcServices();<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      String hostName =<a name="line.604"></a>
+<span class="sourceLineNo">605</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              : this.useThisHostnameInstead;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>      // login the zookeeper client principal (if using security)<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      // login the server principal (if using secure Hadoop)<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      login(userProvider, hostName);<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      // init superusers and add the server principal (if using security)<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      // or process owner as default super user.<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      Superusers.initialize(conf);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>      boolean isMasterNotCarryTable =<a name="line.619"></a>
+<span class="sourceLineNo">620</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      if (!isMasterNotCarryTable) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        mobFileCache = new MobFileCache(conf);<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>      uncaughtExceptionHandler =<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span><a name="line.630"></a>
+<span class="sourceLineNo">631</span>      initializeFileSystem();<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>      this.configurationManager = new ConfigurationManager();<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      // Open connection to zookeeper and set primary watcher<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        canCreateBaseZNode());<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      if (!this.masterless) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        masterAddressTracker.start();<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        clusterStatusTracker.start();<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        masterAddressTracker = null;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>        clusterStatusTracker = null;<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.rpcServices.start(zooKeeper);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      // class HRS. TODO.<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.choreService = new ChoreService(getName(), true);<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      this.executorService = new ExecutorService(getName());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      putUpWebUI();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    } catch (Throwable t) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      // cause of failed startup is lost.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      LOG.error("Failed construction RegionServer", t);<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      throw t;<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><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    if (!(this instanceof HMaster)) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.676"></a>
+<span class="sourceLineNo">677</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      if (isOnlineLogProviderEnabled) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>      }<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    } else {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      final boolean isBalancerDecisionRecording = conf<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      if (isBalancerDecisionRecording) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>  // HMaster should override this method to load the specific config for master<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.697"></a>
+<span class="sourceLineNo">698</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.699"></a>
+<span class="sourceLineNo">700</span>        throw new IOException(msg);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      } else {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        return rpcServices.isa.getHostName();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      }<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    } else {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return hostname;<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">709</span>  /**<a name="line.709"></a>
+<span class="sourceLineNo">710</span>   * If running on Windows, do windows-specific setup.<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>        conf.reloadConfiguration();<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        cm.notifyAllObservers(conf);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      });<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
+<span class="sourceLineNo">720</span><a name="line.720"></a>
+<span class="sourceLineNo">721</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    NettyEventLoopGroupConfig nelgc =<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    return nelgc;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
+<span class="sourceLineNo">729</span><a name="line.729"></a>
+<span class="sourceLineNo">730</span>  private void initializeFileSystem() throws IOException {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    // (unless all is set to defaults).<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.748"></a>
+<span class="sourceLineNo">749</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>  /**<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   * Wait for an active Master.<a name="line.753"></a>
+<span class="sourceLineNo">754</span>   * See override in Master superclass for how it is used.<a name="line.754"></a>
+<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  protected void waitForMasterActive() {}<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  protected String getProcessName() {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    return REGIONSERVER;<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
+<span class="sourceLineNo">761</span><a name="line.761"></a>
+<span class="sourceLineNo">762</span>  protected boolean canCreateBaseZNode() {<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    return this.masterless;<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>  protected boolean canUpdateTableDescriptor() {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    return false;<a name="line.771"></a>
+<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
+<span class="sourceLineNo">773</span><a name="line.773"></a>
+<span class="sourceLineNo">774</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    return new RSRpcServices(this);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>  }<a name="line.776"></a>
+<span class="sourceLineNo">777</span><a name="line.777"></a>
+<span class="sourceLineNo">778</span>  protected void configureInfoServer() {<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    return RSDumpServlet.class;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>  @Override<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  public boolean registerService(Service instance) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    // No stacking of instances is allowed for a single executorService name<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.793"></a>
+<span class="sourceLineNo">794</span>        " already registered, rejecting request from " + instance);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      return false;<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span><a name="line.797"></a>
+<span class="sourceLineNo">798</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    if (LOG.isDebugEnabled()) {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      LOG.debug(<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    }<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    return true;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>  }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span>  private Configuration cleanupConfiguration() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    Configuration conf = this.conf;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    //   masters' availability.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    //   other internal connections too.<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      // the conf and unset the client ZK related properties<a name="line.819"></a>
+<span class="sourceLineNo">820</span>      conf = new Configuration(this.conf);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    }<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    return conf;<a name="line.823"></a>
+<span class="sourceLineNo">824</span>  }<a name="line.824"></a>
+<span class="sourceLineNo">825</span><a name="line.825"></a>
+<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
+<span class="sourceLineNo">829</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    // check to see if the codec list is available:<a name="line.830"></a>
+<span class="sourceLineNo">831</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    if (codecs == null) return;<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    for (String codec : codecs) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>        throw new IOException("Compression codec " + codec +<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          " not supported, aborting RS construction");<a name="line.836"></a>
+<span class="sourceLineNo">837</span>      }<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    }<a name="line.838"></a>
+<span class="sourceLineNo">839</span>  }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span>  public String getClusterId() {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    return this.clusterId;<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span>  /**<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * Setup our cluster connection if not already initialized.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   */<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    if (asyncClusterConnection == null) {<a name="line.849"></a>
+<span class="sourceLineNo">850</span>      Configuration conf = cleanupConfiguration();<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      User user = userProvider.getCurrent();<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      asyncClusterConnection =<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>    }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   */<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  private void preRegistrationInitialization() {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    try {<a name="line.864"></a>
+<span class="sourceLineNo">865</span>      initializeZooKeeper();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      setupClusterConnection();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>      // Setup RPC client for master communication<a name="line.867"></a>
+<span class="sourceLineNo">868</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    } catch (Throwable t) {<a name="line.869"></a>
+<span class="sourceLineNo">870</span>      // Call stop if error or process will stick around for ever since server<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      // puts up non-daemon threads.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      this.rpcServices.stop();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
+<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * &lt;p&gt;<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * Finally open long-living server short-circuit connection.<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   */<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    justification="cluster Id znode read would give us correct response")<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    // Nothing to do in here if no Master in the mix.<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    if (this.masterless) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      return;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    // block until a master is available.  No point in starting up if no master<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    // running.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    // when ready.<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.900"></a>
+<span class="sourceLineNo">901</span>    if (clusterId == null) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>      // Retrieve clusterId<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      // Since cluster status is now up<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      // ID should have already been set by HMaster<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      try {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        if (clusterId == null) {<a name="line.907"></a>
+<span class="sourceLineNo">908</span>          this.abort("Cluster ID has not been set");<a name="line.908"></a>
+<span class="sourceLineNo">909</span>        }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>        LOG.info("ClusterId : " + clusterId);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      } catch (KeeperException e) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      }<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>    waitForMasterActive();<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    if (isStopped() || isAborted()) {<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      return; // No need for further initialization<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>    // watch for snapshots and other procedures<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    try {<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      rspmHost.loadProcedures(conf);<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      rspmHost.initialize(this);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    } catch (KeeperException e) {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
+<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
+<span class="sourceLineNo">930</span><a name="line.930"></a>
+<span class="sourceLineNo">931</span>  /**<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * if the region server is shut down<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * @param tracker znode tracker to use<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      throws IOException, InterruptedException {<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      if (this.stopped) {<a name="line.941"></a>
+<span class="sourceLineNo">942</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    }<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  }<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>  /**<a name="line.947"></a>
+<span class="sourceLineNo">948</span>   * @return True if the cluster is up.<a name="line.948"></a>
+<span class="sourceLineNo">949</span>   */<a name="line.949"></a>
+<span class="sourceLineNo">950</span>  @Override<a name="line.950"></a>
+<span class="sourceLineNo">951</span>  public boolean isClusterUp() {<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    return this.masterless ||<a name="line.952"></a>
+<span class="sourceLineNo">953</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.953"></a>
+<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
+<span class="sourceLineNo">955</span><a name="line.955"></a>
+<span class="sourceLineNo">956</span>  /**<a name="line.956"></a>
+<span class="sourceLineNo">957</span>   * The HRegionServer sticks in this loop until closed.<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   */<a name="line.958"></a>
+<span class="sourceLineNo">959</span>  @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public void run() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    if (isStopped()) {<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      LOG.info("Skipping run; stopped");<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      return;<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    }<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    try {<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      preRegistrationInitialization();<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    } catch (Throwable e) {<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      abort("Fatal exception during initialization", e);<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    }<a name="line.970"></a>
+<span class="sourceLineNo">971</span><a name="line.971"></a>
+<span class="sourceLineNo">972</span>    try {<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.974"></a>
+<span class="sourceLineNo">975</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.975"></a>
+<span class="sourceLineNo">976</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.979"></a>
+<span class="sourceLineNo">980</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.981"></a>
+<span class="sourceLineNo">982</span>        // come up.<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        LOG.debug("About to register with Master.");<a name="line.983"></a>
+<span class="sourceLineNo">984</span>        RetryCounterFactory rcf =<a name="line.984"></a>
+<span class="sourceLineNo">985</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        RetryCounter rc = rcf.create();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        while (keepLooping()) {<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          if (w == null) {<a name="line.989"></a>
+<span class="sourceLineNo">990</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.990"></a>
+<span class="sourceLineNo">991</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.991"></a>
+<span class="sourceLineNo">992</span>            this.sleeper.sleep(sleepTime);<a name="line.992"></a>
+<span class="sourceLineNo">993</span>          } else {<a name="line.993"></a>
+<span class="sourceLineNo">994</span>            handleReportForDutyResponse(w);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>            break;<a name="line.995"></a>
+<span class="sourceLineNo">996</span>          }<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        }<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      }<a name="line.998"></a>
+<span class="sourceLineNo">999</span><a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>        // start the snapshot handler and other procedure handlers,<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>        // since the server is ready to run<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>        if (this.rspmHost != null) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>          this.rspmHost.start();<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        }<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        // Start the Quota Manager<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>        if (this.rsQuotaManager != null) {<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>        }<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>          this.rsSpaceQuotaManager.start();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>        }<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span><a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // We registered with the Master.  Go into run mode.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      long lastMsg = System.currentTimeMillis();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      long oldRequestCount = -1;<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      // The main run loop.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        if (!isClusterUp()) {<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>          if (onlineRegions.isEmpty()) {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          } else if (!this.stopping) {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>            this.stopping = true;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>            LOG.info("Closing user regions");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>            closeUserRegions(this.abortRequested.get());<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>          } else {<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>            if (allUserRegionsOffline) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>              // Set stopped if no more write requests tp meta tables<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>              // since last time we went around the loop.  Any open<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>              // meta regions will be closed on our way out.<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>                break;<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>              }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>              oldRequestCount = getWriteRequestCount();<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>            } else {<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>              // Make sure all regions have been closed -- some regions may<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>              // have not got it because we were splitting at the time of<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>              // the call to closeUserRegions.<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>              closeUserRegions(this.abortRequested.get());<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>            }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>          }<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>        }<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>        long now = System.currentTimeMillis();<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>          tryRegionServerReport(lastMsg, now);<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          lastMsg = System.currentTimeMillis();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>        }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>          this.sleeper.sleep();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>        }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      } // for<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    } catch (Throwable t) {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        abort(prefix + t.getMessage(), t);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span><a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    if (this.leaseManager != null) {<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    if (this.splitLogWorker != null) {<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      splitLogWorker.stop();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (this.infoServer != null) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      LOG.info("Stopping infoServer");<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      try {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>        this.infoServer.stop();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      } catch (Exception e) {<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // Send cache a shutdown.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (blockCache != null) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      blockCache.shutdown();<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    if (mobFileCache != null) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      mobFileCache.shutdown();<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span><a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    if (rspmHost != null) {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    if (this.killed) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } else if (abortRequested.get()) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      if (this.dataFsOk) {<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      }<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      LOG.info("aborting server " + this.serverName);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    } else {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      closeUserRegions(abortRequested.get());<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      LOG.info("stopping server " + this.serverName);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span><a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    if (this.asyncClusterConnection != null) {<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      try {<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        this.asyncClusterConnection.close();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      } catch (IOException e) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        if (this.compactSplitThread != null) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>          this.compactSplitThread.join();<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>          this.compactSplitThread = null;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>        }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>      }<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    // Stop the quota manager<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    if (rsQuotaManager != null) {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      rsQuotaManager.stop();<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    if (rsSpaceQuotaManager != null) {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager.stop();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      rsSpaceQuotaManager = null;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    }<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span><a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    // flag may be changed when closing regions throws exception.<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (this.dataFsOk) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      shutdownWAL(!abortRequested.get());<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span><a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    // Make sure the proxy is down.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    if (this.rssStub != null) {<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      this.rssStub = null;<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    if (this.lockStub != null) {<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      this.lockStub = null;<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    }<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (this.rpcClient != null) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      this.rpcClient.close();<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    if (this.leaseManager != null) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      this.leaseManager.close();<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    if (this.pauseMonitor != null) {<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      this.pauseMonitor.stop();<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    if (!killed) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      stopServiceThreads();<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span><a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    if (this.rpcServices != null) {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>      this.rpcServices.stop();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    }<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span><a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    try {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      deleteMyEphemeralNode();<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      // pass<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    } catch (KeeperException e) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span><a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    if (this.zooKeeper != null) {<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>      this.zooKeeper.close();<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>    this.shutDown = true;<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  private boolean containsMetaTableRegions() {<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  private boolean areAllUserRegionsOffline() {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    boolean allUserRegionsOffline = true;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>        allUserRegionsOffline = false;<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        break;<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      }<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    return allUserRegionsOffline;<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  /**<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   * @return Current write count for all online regions.<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private long getWriteRequestCount() {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    long writeCount = 0;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    return writeCount;<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>  }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span><a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  @VisibleForTesting<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      throws IOException {<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>      return;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      request.setLoad(sl);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      rss.regionServerReport(null, request.build());<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    } catch (ServiceException se) {<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>        // This will be caught and handled as a fatal error in run()<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        throw ioe;<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      if (rssStub == rss) {<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>        rssStub = null;<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      }<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      // Method blocks until new master is found or we are stopped<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      createRegionServerStatusStub(true);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  }<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span><a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>  /**<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>   *<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   * @param regionSizeStore The store containing region sizes<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>   */<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    if (rss == null) {<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      // the current server could be stopping.<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      return true;<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    }<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    try {<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>    } catch (ServiceException se) {<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>            + " This will be retried.", ioe);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>        return true;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>      if (rssStub == rss) {<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        rssStub = null;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>      }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>      createRegionServerStatusStub(true);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>            return false;<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>          }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>        }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>      }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>    }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    return true;<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>  /**<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   *<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @param rss The stub to send to the Master<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   * @param regionSizeStore The store containing region sizes<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>    RegionSpaceUseReportRequest request =<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    // Record the number of size reports sent<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>    if (metricsRegionServer != null) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  /**<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>   *<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>   * @param regionSizes The size in bytes of regions<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>   * @return The corresponding protocol buffer message.<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>   */<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    return request.build();<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>  }<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  /**<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>   * protobuf message.<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>   *<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>   * @param regionInfo The RegionInfo<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>   * @return The protocol buffer<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>   */<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    return RegionSpaceUse.newBuilder()<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>        .build();<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  }<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span><a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>      throws IOException {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    // the wrapper to compute those numbers in one place.<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    // history.<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    long usedMemory = -1L;<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    long maxMemory = -1L;<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>    if (usage != null) {<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>      usedMemory = usage.getUsed();<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>    for (String coprocessor : coprocessors) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>    }<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    for (HRegion region : regions) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      if (region.getCoprocessorHost() != null) {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          .getCoprocessors()) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    if (this.infoServer != null) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>    } else {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      serverLoad.setInfoServerPort(-1);<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    MetricsUserAggregateSource userSource =<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    if (userSource != null) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    if (sameReplicationSourceAndSink &amp;&amp; replicationSourceHandler != null) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      // always refresh first to get the latest value<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>      ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      if (rLoad != null) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>          .getReplicationLoadSourceEntries()) {<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    } else {<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      if (replicationSourceHandler != null) {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        if (rLoad != null) {<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>          for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>            .getReplicationLoadSourceEntries()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>            serverLoad.addReplLoadSource(rLS);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          }<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        }<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      if (replicationSinkHandler != null) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        ReplicationLoad rLoad = replicationSinkHandler.refreshAndGetReplicationLoad();<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>        if (rLoad != null) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>          serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    return serverLoad.build();<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span><a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    StringBuilder sb = new StringBuilder();<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    return sb.toString();<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>  }<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span><a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>  /**<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>   * Wait on regions close.<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   */<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    // Wait till all regions are closed before going out.<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    int lastCount = -1;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    long previousLogTime = 0;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>    boolean interrupted = false;<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>    try {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      while (!onlineRegions.isEmpty()) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        int count = getNumberOfOnlineRegions();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        // Only print a message if the count of regions has changed.<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>        if (count != lastCount) {<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>          // Log every second at most<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>            previousLogTime = System.currentTimeMillis();<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>            lastCount = count;<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>            // Only print out regions still closing if a small number else will<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>            // swamp the log.<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>            }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>          }<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        // protect against the case where an open comes in after we start the<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        // iterator of onlineRegions to close all user regions.<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>            closedRegions.add(hri.getEncodedName());<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>            // Don't update zk with this close transition; pass false.<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>          }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        // No regions in RIT, we could stop waiting now.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>          if (!onlineRegions.isEmpty()) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>                " because some regions failed closing");<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          }<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          break;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        }<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        if (sleepInterrupted(200)) {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>          interrupted = true;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        }<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    } finally {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      if (interrupted) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        Thread.currentThread().interrupt();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      }<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>    }<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    boolean interrupted = false;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    try {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>      Thread.sleep(millis);<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    } catch (InterruptedException e) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>      LOG.warn("Interrupted while sleeping");<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      interrupted = true;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    return interrupted;<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>  }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>  private void shutdownWAL(final boolean close) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    if (this.walFactory != null) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      try {<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        if (close) {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>          walFactory.close();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        } else {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          walFactory.shutdown();<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (Throwable e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      }<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span><a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>  /**<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   *<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   * @return NamedQueueRecorder<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>   */<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>    return this.namedQueueRecorder;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>  /*<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>   *<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>   * @param c Extra configuration.<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>   */<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  throws IOException {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    try {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      boolean updateRootDir = false;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>        String key = e.getName();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>        // The hostname the master sees us as.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              this.startcode);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>            LOG.error(msg);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>            throw new IOException(msg);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>          }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            LOG.error(msg);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>          }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          continue;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>        }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span><a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        String value = e.getValue();<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>            updateRootDir = true;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>          }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        }<a name="line.1568"></a>
 <span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1573"></a>
+<span class="sourceLineNo">1570</span>        if (LOG.isDebugEnabled()) {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        this.conf.set(key, value);<a name="line.1573"></a>
 <span class="sourceLineNo">1574</span>      }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      // Save it in a file, this will allow to see if we crash<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      setupWALAndReplication();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      final MetricsTable metricsTable =<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      pauseMonitor.start();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>        startServices();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      // or make sense of it.<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      startReplicationService();<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span><a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      // Set up ZK<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>          ", sessionid=0x" +<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span><a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      // Wake up anyone waiting for this server to online<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>      synchronized (online) {<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        online.set(true);<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        online.notifyAll();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    } catch (Throwable e) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      stop("Failed initialization");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>          "Region server startup failed");<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    } finally {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      sleeper.skipSleepCycle();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      // it.<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      // init the chunkCreator<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  }<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span><a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  private void startHeapMemoryManager() {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    if (this.blockCache != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      this.hMemManager =<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      this.hMemManager.start(getChoreService());<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>    }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>  }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span><a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  @Override<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>    return regionServerAccounting;<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   * @param r Region to get RegionLoad for.<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>   * @return RegionLoad instance.<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>   */<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>    int stores = 0;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    int storefiles = 0;<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>    int storeRefCount = 0;<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    int storeUncompressedSizeMB = 0;<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    int storefileSizeMB = 0;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    long storefileIndexSizeKB = 0;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>    int rootLevelIndexSizeKB = 0;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    int totalStaticIndexSizeKB = 0;<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    int totalStaticBloomSizeKB = 0;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    long totalCompactingKVs = 0;<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    long currentCompactedKVs = 0;<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>    stores += storeList.size();<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>    for (HStore store : storeList) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      storefiles += store.getStorefilesCount();<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      storeRefCount += currentStoreRefCount;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>      if (progress != null) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>      }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>    }<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span><a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    if (regionLoadBldr == null) {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    if (regionSpecifier == null) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1721"></a>
+<span class="sourceLineNo">1575</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      createMyEphemeralNode();<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span><a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      if (updateRootDir) {<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        initializeFileSystem();<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span><a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      }<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span><a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      // Save it in a file, this will allow to see if we crash<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      setupWALAndReplication();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      final MetricsTable metricsTable =<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      pauseMonitor.start();<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        startServices();<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      // or make sense of it.<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      startReplicationService();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span><a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      // Set up ZK<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          ", sessionid=0x" +<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span><a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>      // Wake up anyone waiting for this server to online<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      synchronized (online) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        online.set(true);<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        online.notifyAll();<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>    } catch (Throwable e) {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      stop("Failed initialization");<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>          "Region server startup failed");<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    } finally {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      sleeper.skipSleepCycle();<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>  }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span><a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>      // it.<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      // init the chunkCreator<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>  }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span><a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>  private void startHeapMemoryManager() {<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    if (this.blockCache != null) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      this.hMemManager =<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      this.hMemManager.start(getChoreService());<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>  }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span><a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>  }<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span><a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>  }<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span><a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  @Override<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    return regionServerAccounting;<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  }<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span><a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /**<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @param r Region to get RegionLoad for.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>   * @return RegionLoad instance.<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>   */<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    int stores = 0;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    int storefiles = 0;<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    int storeRefCount = 0;<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>    int storeUncompressedSizeMB = 0;<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    int storefileSizeMB = 0;<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    long storefileIndexSizeKB = 0;<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>    int rootLevelIndexSizeKB = 0;<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    int totalStaticIndexSizeKB = 0;<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    int totalStaticBloomSizeKB = 0;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    long totalCompactingKVs = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    long currentCompactedKVs = 0;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    stores += storeList.size();<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    for (HStore store : storeList) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      storefiles += store.getStorefilesCount();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>      storeRefCount += currentStoreRefCount;<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (progress != null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>    }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      .setStores(stores)<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>      .setStorefiles(storefiles)<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>      .setStoreRefCount(storeRefCount)<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      .setDataLocality(dataLocality)<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    return regionLoadBldr.build();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>  }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span><a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    userLoadBldr.setUserName(user);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>            .setHostName(clientMetrics.getHostName())<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return userLoadBldr.build();<a name="line.1764"></a>
+<span class="sourceLineNo">1723</span><a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    if (regionLoadBldr == null) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    if (regionSpecifier == null) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>      .setStores(stores)<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      .setStorefiles(storefiles)<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>      .setStoreRefCount(storeRefCount)<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      .setDataLocality(dataLocality)<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span><a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    return regionLoadBldr.build();<a name="line.1764"></a>
 <span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
 <span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  }<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span><a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  /**<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>   */<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private final HRegionServer instance;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    private final int majorCompactPriority;<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    // immediately upon region server startup<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    private long iteration = 1;<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      this.instance = h;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      /* MajorCompactPriority is configurable.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>       * If not set, the compaction will use default priority.<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>       */<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              DEFAULT_PRIORITY);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
+<span class="sourceLineNo">1767</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>    userLoadBldr.setUserName(user);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>            .setHostName(clientMetrics.getHostName())<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    return userLoadBldr.build();<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>  }<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span><a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>  /**<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>   */<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    private final HRegionServer instance;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    private final int majorCompactPriority;<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    // immediately upon region server startup<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    private long iteration = 1;<a name="line.1794"></a>
 <span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    protected void chore() {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        // Skip compaction if region is read only<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>        if (r == null || r.isReadOnly()) {<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          continue;<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>        }<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        HRegion hr = (HRegion) r;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        for (HStore s : hr.stores.values()) {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          try {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            assert multiplier &gt; 0;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>            if (iteration % multiplier != 0) {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>              continue;<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            if (s.needsCompaction()) {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>                getName() + " requests compaction");<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>              s.triggerMajorCompaction();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>                    getName() + " requests major compaction; use default priority",<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                    Store.NO_PRIORITY,<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>              } else {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>              }<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>            }<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>          } catch (IOException e) {<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>          }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        }<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>  }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span><a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    private final HRegionServer server;<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    private final long rangeOfDelayMs;<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span><a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      this.server = server;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span><a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span><a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    @Override<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    protected void chore() {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        if (r == null) continue;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>          if (requester != null) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>                  randomDelay);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>            }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>          }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      }<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>  }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  /**<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * method is designed mostly to be useful in tests.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   *<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>   * @return true if online, false if not.<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   */<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>  public boolean isOnline() {<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    return online.get();<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  }<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span><a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  /**<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * be hooked up to WAL.<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   */<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>  private void setupWALAndReplication() throws IOException {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>    WALFactory factory =<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span><a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      LOG.debug("logDir={}", logDir);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      if (this.walFs.exists(logDir)) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        throw new RegionServerRunningException(<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      // region servers.<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        factory.getWALProvider());<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    }<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>    this.walFactory = factory;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  /**<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>   * Start up replication source and sink handlers.<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>   */<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  private void startReplicationService() throws IOException {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        this.replicationSourceHandler != null) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } else {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      if (this.replicationSourceHandler != null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      if (this.replicationSinkHandler != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span><a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  /**<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>   * @return Master address tracker instance.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   */<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    return this.masterAddressTracker;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>  }<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span><a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>  /**<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>   * registered with the Master.<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>   * hosting server. Worker logs the exception and exits.<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>   */<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>  private void startServices() throws IOException {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      initializeThreads();<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    this.secureBulkLoadManager.start();<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span><a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    // Health checker thread.<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    if (isHealthCheckerConfigured()) {<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    // Executor status collect thread.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span><a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    this.walRoller = new LogRoller(this);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span><a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    int cleanerInterval =<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    this.compactedFileDischarger =<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span><a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    // Start executor services<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    // Start the threads for compacted files discharger<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    }<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span><a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        uncaughtExceptionHandler);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>    if (this.cacheFlusher != null) {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2029"></a>
+<span class="sourceLineNo">1796</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      this.instance = h;<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span><a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      /* MajorCompactPriority is configurable.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>       * If not set, the compaction will use default priority.<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>       */<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>              DEFAULT_PRIORITY);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    @Override<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    protected void chore() {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        // Skip compaction if region is read only<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        if (r == null || r.isReadOnly()) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>          continue;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        HRegion hr = (HRegion) r;<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>        for (HStore s : hr.stores.values()) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          try {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>            assert multiplier &gt; 0;<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>            if (iteration % multiplier != 0) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>              continue;<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>            }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>            if (s.needsCompaction()) {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>                getName() + " requests compaction");<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>              s.triggerMajorCompaction();<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>                    getName() + " requests major compaction; use default priority",<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>                    Store.NO_PRIORITY,<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>              } else {<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>              }<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            }<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>          } catch (IOException e) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    private final HRegionServer server;<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    private final long rangeOfDelayMs;<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      this.server = server;<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span><a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    @Override<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    protected void chore() {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        if (r == null) continue;<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          if (requester != null) {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>                  randomDelay);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>            }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>          }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>        }<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      }<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    }<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  }<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>  /**<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * method is designed mostly to be useful in tests.<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   * @return true if online, false if not.<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   */<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public boolean isOnline() {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    return online.get();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>  }<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span><a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>  /**<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * be hooked up to WAL.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   */<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>  private void setupWALAndReplication() throws IOException {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    WALFactory factory =<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span><a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      LOG.debug("logDir={}", logDir);<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (this.walFs.exists(logDir)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new RegionServerRunningException(<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      // region servers.<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        factory.getWALProvider());<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>    }<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    this.walFactory = factory;<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>  }<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span><a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>  /**<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>   * Start up replication source and sink handlers.<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>   */<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  private void startReplicationService() throws IOException {<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    } else {<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      if (this.replicationSourceHandler != null) {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      if (this.replicationSinkHandler != null) {<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    }<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  }<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span><a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  /**<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>   * @return Master address tracker instance.<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>   */<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    return this.masterAddressTracker;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>  }<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span><a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>  /**<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>   * registered with the Master.<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>   * hosting server. Worker logs the exception and exits.<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>   */<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>  private void startServices() throws IOException {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>      initializeThreads();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>    }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>    this.secureBulkLoadManager.start();<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    // Health checker thread.<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>    if (isHealthCheckerConfigured()) {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    // Executor status collect thread.<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span><a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    this.walRoller = new LogRoller(this);<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    int cleanerInterval =<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    this.compactedFileDischarger =<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span><a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // Start executor services<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>    // Start the threads for compacted files discharger<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    if (this.compactionChecker != null) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      choreService.scheduleChore(compactionChecker);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>    }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    if (this.periodicFlusher != null) {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    if (this.healthCheckChore != null) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2041"></a>
+<span class="sourceLineNo">2031</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>        uncaughtExceptionHandler);<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    if (this.cacheFlusher != null) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2041"></a>
 <span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    if (this.executorStatusChore != null) {<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    if (this.nonceManagerChore != null) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2047"></a>
+<span class="sourceLineNo">2043</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    if (this.compactionChecker != null) {<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>      choreService.scheduleChore(compactionChecker);<a name="line.2047"></a>
 <span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    if (this.storefileRefresher != null) {<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2050"></a>
+<span class="sourceLineNo">2049</span>    if (this.periodicFlusher != null) {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2050"></a>
 <span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    if (this.fsUtilizationChore != null) {<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2053"></a>
+<span class="sourceLineNo">2052</span>    if (this.healthCheckChore != null) {<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2053"></a>
 <span class="sourceLineNo">2054</span>    }<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2056"></a>
+<span class="sourceLineNo">2055</span>    if (this.executorStatusChore != null) {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2056"></a>
 <span class="sourceLineNo">2057</span>    }<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span><a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    // an unhandled exception, it will just exit.<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        uncaughtExceptionHandler);<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    // Create the log splitting worker and start it<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      splitLogWorker.start();<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>      LOG.debug("SplitLogWorker started");<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>    }<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span><a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>    // Memstore services.<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    startHeapMemoryManager();<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    // Call it after starting HeapMemoryManager.<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    initializeMemStoreChunkCreator();<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  }<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>  private void initializeThreads() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    // Cache flushing thread.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span><a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    // Compaction thread<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span><a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>    if (isSlowLogTableEnabled) {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>      // default chore duration: 10 min<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span><a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    if (this.nonceManager != null) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span><a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // Setup the Quota Manager<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    }<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span><a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    boolean onlyMetaRefresh = false;<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (storefileRefreshPeriod == 0) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      onlyMetaRefresh = true;<a name="line.2131"></a>
+<span class="sourceLineNo">2058</span>    if (this.nonceManagerChore != null) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>    }<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>    if (this.storefileRefresher != null) {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>    }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>    if (this.fsUtilizationChore != null) {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    }<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    // an unhandled exception, it will just exit.<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        uncaughtExceptionHandler);<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>    // Create the log splitting worker and start it<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>      splitLogWorker.start();<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      LOG.debug("SplitLogWorker started");<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span><a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    // Memstore services.<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>    startHeapMemoryManager();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>    // Call it after starting HeapMemoryManager.<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    initializeMemStoreChunkCreator();<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span><a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>  private void initializeThreads() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    // Cache flushing thread.<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span><a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>    // Compaction thread<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span><a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span><a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    if (isSlowLogTableEnabled) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>      // default chore duration: 10 min<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    if (this.nonceManager != null) {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>    }<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span><a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>    // Setup the Quota Manager<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span><a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>          onlyMetaRefresh, this, this);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    }<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    registerConfigurationObservers();<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span><a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>  private void registerConfigurationObservers() {<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    configurationManager.registerObserver(this);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>  }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  /**<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>   * Puts up the webui.<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>   */<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>  private void putUpWebUI() throws IOException {<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>    if(this instanceof HMaster) {<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    // -1 is for disabling info server<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    if (port &lt; 0) {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      return;<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>      String msg =<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          "Failed to start http info server. Address " + addr<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>      LOG.error(msg);<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      throw new IOException(msg);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    // check if auto port bind enabled<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    while (true) {<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>      try {<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>        configureInfoServer();<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        this.infoServer.start();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        break;<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      } catch (BindException e) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        if (!auto) {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          // auto bind disabled throw BindException<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          throw e;<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>        // auto bind enabled, try to use another port<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>        port++;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    port = this.infoServer.getPort();<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>  }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span><a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  /*<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>   * Verify that server is healthy<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   */<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  private boolean isHealthy() {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    if (!dataFsOk) {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      // File system problem<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return false;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>    // Verify that all threads are alive<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    if (!healthy) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    return healthy;<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  }<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span><a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  @Override<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    return walFactory.getWALs();<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>  }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span><a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  @Override<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    if (this.walRoller != null) {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>      this.walRoller.addWAL(wal);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return wal;<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>  }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span><a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>  public LogRoller getWalRoller() {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    return walRoller;<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span><a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  WALFactory getWalFactory() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return walFactory;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  @Override<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  public Connection getConnection() {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    return getAsyncConnection().toConnection();<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  @Override<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>  public void stop(final String msg) {<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>  }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span><a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>  /**<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>   * Stops the regionserver.<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * @param msg Status message<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * @param force True if this is a regionserver abort<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   */<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    if (!this.stopped) {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      if (this.rsHost != null) {<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        // when forced via abort don't allow CPs to override<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>        try {<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>          this.rsHost.preStop(msg, user);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>        } catch (IOException ioe) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>          if (!force) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>            return;<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>          }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      this.stopped = true;<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      LOG.info("STOPPED: " + msg);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      // Wakes run() if it is sleeping<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      sleeper.skipSleepCycle();<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public void waitForServerOnline(){<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      synchronized (online) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        try {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>          online.wait(msgInterval);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>        } catch (InterruptedException ie) {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>          Thread.currentThread().interrupt();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>          break;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>        }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      }<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span><a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>  @Override<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    HRegion r = context.getRegion();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>    long openProcId = context.getOpenProcId();<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    rpcServices.checkOpen();<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>    // Skip compaction check if region is read only<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>    if (!r.isReadOnly()) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      for (HStore s : r.stores.values()) {<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>        }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      }<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      LOG.error(<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      openSeqNum = 0;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>    }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // Notify master<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      throw new IOException(<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    }<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span><a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    triggerFlushInPrimaryRegion(r);<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span><a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span><a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    boolean onlyMetaRefresh = false;<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    if (storefileRefreshPeriod == 0) {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      onlyMetaRefresh = true;<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    }<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>          onlyMetaRefresh, this, this);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    registerConfigurationObservers();<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>  }<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span><a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>  private void registerConfigurationObservers() {<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>    configurationManager.registerObserver(this);<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  }<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span><a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>  /**<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>   * Puts up the webui.<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>   */<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  private void putUpWebUI() throws IOException {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span><a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    if(this instanceof HMaster) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>    }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>    // -1 is for disabling info server<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    if (port &lt; 0) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      return;<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span><a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      String msg =<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          "Failed to start http info server. Address " + addr<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>      LOG.error(msg);<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>      throw new IOException(msg);<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>    }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    // check if auto port bind enabled<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    while (true) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      try {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>        configureInfoServer();<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>        this.infoServer.start();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>        break;<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      } catch (BindException e) {<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>        if (!auto) {<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>          // auto bind disabled throw BindException<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>          throw e;<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>        }<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>        // auto bind enabled, try to use another port<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        port++;<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    }<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>    port = this.infoServer.getPort();<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span><a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  /*<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   * Verify that server is healthy<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>   */<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>  private boolean isHealthy() {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    if (!dataFsOk) {<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      // File system problem<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      return false;<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    // Verify that all threads are alive<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>    if (!healthy) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>    return healthy;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  }<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span><a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>  @Override<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>    return walFactory.getWALs();<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span><a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>  @Override<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>    if (this.walRoller != null) {<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      this.walRoller.addWAL(wal);<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    }<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    return wal;<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>  }<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span><a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>  public LogRoller getWalRoller() {<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>    return walRoller;<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>  }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span><a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>  WALFactory getWalFactory() {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>    return walFactory;<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>  }<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span><a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>  @Override<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>  public Connection getConnection() {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    return getAsyncConnection().toConnection();<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  @Override<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>  public void stop(final String msg) {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Stops the regionserver.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param msg Status message<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @param force True if this is a regionserver abort<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   */<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    if (!this.stopped) {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      if (this.rsHost != null) {<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>        // when forced via abort don't allow CPs to override<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>        try {<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>          this.rsHost.preStop(msg, user);<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>        } catch (IOException ioe) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>          if (!force) {<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>            return;<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>          }<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>        }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>      }<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      this.stopped = true;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      LOG.info("STOPPED: " + msg);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      // Wakes run() if it is sleeping<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      sleeper.skipSleepCycle();<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>    }<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>  }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span><a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  public void waitForServerOnline(){<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      synchronized (online) {<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        try {<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>          online.wait(msgInterval);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>        } catch (InterruptedException ie) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>          Thread.currentThread().interrupt();<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          break;<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>        }<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    }<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span><a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  @Override<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    HRegion r = context.getRegion();<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>    long openProcId = context.getOpenProcId();<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>    rpcServices.checkOpen();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>    // Skip compaction check if region is read only<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    if (!r.isReadOnly()) {<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      for (HStore s : r.stores.values()) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>        }<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      }<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>      LOG.error(<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      openSeqNum = 0;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>    }<a name="line.2329"></a>
 <span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>  /**<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>   * around to receive it.<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>   */<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>    final TransitionCode code = context.getCode();<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>    final RegionInfo[] hris = context.getHris();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span><a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>    if (code == TransitionCode.OPENED) {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>      if (hris[0].isMetaRegion()) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        try {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>        } catch (KeeperException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>          LOG.info("Failed to update meta location", e);<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          return false;<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      } else {<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>        try {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        } catch (IOException e) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>          LOG.info("Failed to update meta", e);<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>          return false;<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        }<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    return true;<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>      final RegionStateTransitionContext context) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    final TransitionCode code = context.getCode();<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    final RegionInfo[] hris = context.getHris();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    final long[] procIds = context.getProcIds();<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span><a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    transition.setTransitionCode(code);<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>    }<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    for (RegionInfo hri: hris) {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    for (long procId: procIds) {<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>      transition.addProcId(procId);<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span><a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    return builder.build();<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>  }<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span><a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  @Override<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>      return skipReportingTransition(context);<a name="line.2392"></a>
+<span class="sourceLineNo">2331</span>    // Notify master<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>      throw new IOException(<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    }<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    triggerFlushInPrimaryRegion(r);<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span><a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>  }<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span><a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>  /**<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>   * around to receive it.<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>   */<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>    final TransitionCode code = context.getCode();<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    final RegionInfo[] hris = context.getHris();<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span><a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>    if (code == TransitionCode.OPENED) {<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>      if (hris[0].isMetaRegion()) {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>        try {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        } catch (KeeperException e) {<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>          LOG.info("Failed to update meta location", e);<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>          return false;<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>        }<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      } else {<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>        try {<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>        } catch (IOException e) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>          LOG.info("Failed to update meta", e);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>          return false;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>        }<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>      }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    }<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>    return true;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>  }<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span><a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>      final RegionStateTransitionContext context) {<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    final TransitionCode code = context.getCode();<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    final RegionInfo[] hris = context.getHris();<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    final long[] procIds = context.getProcIds();<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span><a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    transition.setTransitionCode(code);<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    }<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    for (RegionInfo hri: hris) {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>    }<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    final ReportRegionStateTransitionRequest request =<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>        createReportRegionStateTransitionRequest(context);<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    final long initPauseTime = 1000;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    int tries = 0;<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    long pauseTime;<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>    // HRegionServer does down.<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      try {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        if (rss == null) {<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>          createRegionServerStatusStub();<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>          continue;<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        }<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>        ReportRegionStateTransitionResponse response =<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>          rss.reportRegionStateTransition(null, request);<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>        if (response.hasErrorMessage()) {<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          break;<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        }<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>        }<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>        // NOTE: Return mid-method!!!<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>        return true;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>      } catch (ServiceException se) {<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        boolean pause =<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        if (pause) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          // Do backoff else we flood the Master with requests.<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>        } else {<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>          pauseTime = initPauseTime; // Reset.<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>        }<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        LOG.info("Failed report transition " +<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            (pause?<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>                " immediately."),<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>            ioe);<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        tries++;<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        if (rssStub == rss) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>          rssStub = null;<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>        }<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>      }<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>    }<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    return false;<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>  }<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span><a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>  /**<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>   */<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      return;<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>          region.conf)) {<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      region.setReadsEnabled(true);<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>      return;<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    }<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span><a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span><a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    if (this.executorService != null) {<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>    } else {<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>        region.getRegionInfo());<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>     }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>  }<a name="line.2476"></a>
+<span class="sourceLineNo">2394</span>    for (long procId: procIds) {<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>      transition.addProcId(procId);<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>    return builder.build();<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>  }<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span><a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  @Override<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>      return skipReportingTransition(context);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    final ReportRegionStateTransitionRequest request =<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>        createReportRegionStateTransitionRequest(context);<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span><a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>    final long initPauseTime = 1000;<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    int tries = 0;<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    long pauseTime;<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>    // HRegionServer does down.<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>      try {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>        if (rss == null) {<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>          createRegionServerStatusStub();<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>          continue;<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>        }<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>        ReportRegionStateTransitionResponse response =<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>          rss.reportRegionStateTransition(null, request);<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>        if (response.hasErrorMessage()) {<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>          break;<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>        }<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>        }<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>        // NOTE: Return mid-method!!!<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>        return true;<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>      } catch (ServiceException se) {<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>        boolean pause =<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>        if (pause) {<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>          // Do backoff else we flood the Master with requests.<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>        } else {<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>          pauseTime = initPauseTime; // Reset.<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>        }<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>        LOG.info("Failed report transition " +<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>            (pause?<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>                " immediately."),<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>            ioe);<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>        tries++;<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>        if (rssStub == rss) {<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>          rssStub = null;<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>        }<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      }<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>    }<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>    return false;<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>  }<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span><a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>  /**<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>   */<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>      return;<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>    }<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>          region.conf)) {<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>      region.setReadsEnabled(true);<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>      return;<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>    }<a name="line.2476"></a>
 <span class="sourceLineNo">2477</span><a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>  @Override<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>  public RpcServerInterface getRpcServer() {<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    return rpcServices.rpcServer;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>  }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>  @VisibleForTesting<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>  public RSRpcServices getRSRpcServices() {<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    return rpcServices;<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>  }<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span><a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>  /**<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>   *<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>   * @param reason<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>   *          the reason we are aborting<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>   * @param cause<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>   *          the exception that caused the abort, or null<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>   */<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>  @Override<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>  public void abort(String reason, Throwable cause) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    if (!setAbortRequested()) {<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      // Abort already in progress, ignore the new request.<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>      LOG.debug(<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      return;<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    }<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    if (cause != null) {<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    } else {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>    }<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>    try {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span><a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>    try {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (cause != null) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      }<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      // Report to the master but only if we have already registered with the master.<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>        builder.setErrorMessage(msg);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    } catch (Throwable t) {<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span><a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>    scheduleAbortTimer();<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>    // shutdown should be run as the internal user<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>    stop(reason, true, null);<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>  }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>  /**<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>   * Sets the abort state if not already set.<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>   * progress.<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>   */<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>  protected boolean setAbortRequested() {<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    return abortRequested.compareAndSet(false, true);<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>  }<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span><a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>  /**<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>   */<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>  public void abort(String reason) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>    abort(reason, null);<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>  }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>  @Override<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>  public boolean isAborted() {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    return abortRequested.get();<a name="line.2565"></a>
+<span class="sourceLineNo">2478</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span><a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>    if (this.executorService != null) {<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>    } else {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>        region.getRegionInfo());<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>     }<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>  }<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span><a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>  @Override<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>  public RpcServerInterface getRpcServer() {<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    return rpcServices.rpcServer;<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>  }<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span><a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>  @VisibleForTesting<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>  public RSRpcServices getRSRpcServices() {<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    return rpcServices;<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  }<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span><a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>  /**<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>   *<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>   * @param reason<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>   *          the reason we are aborting<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>   * @param cause<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>   *          the exception that caused the abort, or null<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>   */<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>  @Override<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  public void abort(String reason, Throwable cause) {<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>    if (!setAbortRequested()) {<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>      // Abort already in progress, ignore the new request.<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>      LOG.debug(<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>      return;<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    }<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>    if (cause != null) {<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>    } else {<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>    }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    try {<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>    }<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span><a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>    try {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>      if (cause != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      // Report to the master but only if we have already registered with the master.<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>        builder.setErrorMessage(msg);<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>      }<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>    } catch (Throwable t) {<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span><a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    scheduleAbortTimer();<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>    // shutdown should be run as the internal user<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>    stop(reason, true, null);<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>  }<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span><a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>  /**<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>   * Sets the abort state if not already set.<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>   * progress.<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>   */<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>  protected boolean setAbortRequested() {<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    return abortRequested.compareAndSet(false, true);<a name="line.2565"></a>
 <span class="sourceLineNo">2566</span>  }<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span><a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>  /*<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>   * hostname+port immediately.<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>   */<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>  @VisibleForTesting<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>  protected void kill() {<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>    this.killed = true;<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>    abort("Simulated kill");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>  }<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span><a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>  // Limits the time spent in the shutdown process.<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>  private void scheduleAbortTimer() {<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    if (this.abortMonitor == null) {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      TimerTask abortTimeoutTask = null;<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      try {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>        timerTaskCtor.setAccessible(true);<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      } catch (Exception e) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>      }<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      if (abortTimeoutTask != null) {<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      }<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>    }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>  }<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span><a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  /**<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>   * have already been called.<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>   */<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>  protected void stopServiceThreads() {<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>    // clean up the scheduled chores<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    if (this.choreService != null) {<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      choreService.cancelChore(compactionChecker);<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      choreService.cancelChore(periodicFlusher);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>      choreService.cancelChore(healthCheckChore);<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>      choreService.cancelChore(executorStatusChore);<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>      choreService.cancelChore(storefileRefresher);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      choreService.shutdown();<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span><a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>    if (this.cacheFlusher != null) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>      this.cacheFlusher.join();<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>    }<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span><a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    if (this.spanReceiverHost != null) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>      this.spanReceiverHost.closeReceivers();<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>    }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    if (this.walRoller != null) {<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      this.walRoller.close();<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>    }<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    if (this.compactSplitThread != null) {<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      this.compactSplitThread.join();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    if (this.executorService != null) this.executorService.shutdown();<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        this.replicationSourceHandler == this.replicationSinkHandler) {<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>    } else {<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      if (this.replicationSourceHandler != null) {<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>      }<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      if (this.replicationSinkHandler != null) {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>      }<a name="line.2641"></a>
+<span class="sourceLineNo">2568</span>  /**<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>   */<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>  public void abort(String reason) {<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    abort(reason, null);<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>  }<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span><a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>  @Override<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>  public boolean isAborted() {<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>    return abortRequested.get();<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>  }<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span><a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>  /*<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>   * hostname+port immediately.<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>   */<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>  @VisibleForTesting<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>  protected void kill() {<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    this.killed = true;<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    abort("Simulated kill");<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>  }<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span><a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>  // Limits the time spent in the shutdown process.<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>  private void scheduleAbortTimer() {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>    if (this.abortMonitor == null) {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>      TimerTask abortTimeoutTask = null;<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      try {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>        timerTaskCtor.setAccessible(true);<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>      } catch (Exception e) {<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>      }<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>      if (abortTimeoutTask != null) {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>      }<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>    }<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>  }<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span><a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>  /**<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>   * have already been called.<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>   */<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>  protected void stopServiceThreads() {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>    // clean up the scheduled chores<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    if (this.choreService != null) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>      choreService.cancelChore(compactionChecker);<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      choreService.cancelChore(periodicFlusher);<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>      choreService.cancelChore(healthCheckChore);<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>      choreService.cancelChore(executorStatusChore);<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>      choreService.cancelChore(storefileRefresher);<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>      choreService.shutdown();<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>    }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>    if (this.cacheFlusher != null) {<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>      this.cacheFlusher.join();<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    }<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span><a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>    if (this.spanReceiverHost != null) {<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>      this.spanReceiverHost.closeReceivers();<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>    }<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>    if (this.walRoller != null) {<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>      this.walRoller.close();<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    }<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    if (this.compactSplitThread != null) {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>      this.compactSplitThread.join();<a name="line.2641"></a>
 <span class="sourceLineNo">2642</span>    }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span><a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>  /**<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>   * @return Return the object that implements the replication<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>   * source executorService.<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>   */<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>  @Override<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    return replicationSourceHandler;<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>  }<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span><a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>  /**<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>   */<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    return replicationSinkHandler;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>  }<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span><a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>  /**<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>   * Method will block until a master is available. You can break from this<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>   * block by requesting the server stop.<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>   *<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>   * @return master + port, or null if server has been stopped<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>   */<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    return createRegionServerStatusStub(false);<a name="line.2671"></a>
+<span class="sourceLineNo">2643</span>    if (this.executorService != null) {<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      this.executorService.shutdown();<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    }<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    } else {<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>      if (this.replicationSourceHandler != null) {<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>      }<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>      if (this.replicationSinkHandler != null) {<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>      }<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>    }<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  }<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>  /**<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>   * @return Return the object that implements the replication<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>   * source executorService.<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>   */<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>  @Override<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    return replicationSourceHandler;<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>  }<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span><a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>  /**<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>   */<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    return replicationSinkHandler;<a name="line.2671"></a>
 <span class="sourceLineNo">2672</span>  }<a name="line.2672"></a>
 <span class="sourceLineNo">2673</span><a name="line.2673"></a>
 <span class="sourceLineNo">2674</span>  /**<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   * You can break from this block by requesting the server stop.<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   * @return master + port, or null if server has been stopped<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>  @VisibleForTesting<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (rssStub != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      return masterAddressTracker.getMasterAddress();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    ServerName sn = null;<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>    long previousLogTime = 0;<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>    boolean interrupted = false;<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>    try {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      while (keepLooping()) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>        if (sn == null) {<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>          if (!keepLooping()) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>            // give up with no connection.<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>            return null;<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>          }<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>            LOG.debug("No master found; retry");<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>            previousLogTime = System.currentTimeMillis();<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>          }<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>          if (sleepInterrupted(200)) {<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>            interrupted = true;<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>          }<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>          continue;<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        }<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span><a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>        // If we are on the active master, use the shortcut<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>          break;<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>        }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        try {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>          BlockingRpcChannel channel =<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>              shortOperationTimeout);<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          break;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        } catch (IOException e) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            e = e instanceof RemoteException ?<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>            } else {<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>            }<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>            previousLogTime = System.currentTimeMillis();<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          }<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          if (sleepInterrupted(200)) {<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>            interrupted = true;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>          }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>        }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      }<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>      if (interrupted) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        Thread.currentThread().interrupt();<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    }<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    this.rssStub = intRssStub;<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>    this.lockStub = intLockStub;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    return sn;<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>  }<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span><a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>  /**<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>   * @return True if we should break loop because cluster is going down or<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>   */<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>  private boolean keepLooping() {<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  /*<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>   * us by the master.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * null if we failed to register.<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @throws IOException<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>    if (masterServerName == null || rss == null) return null;<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    RegionServerStartupResponse result = null;<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>    try {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>      rpcServices.requestCount.reset();<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      int port = rpcServices.isa.getPort();<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      }<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>      request.setPort(port);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      request.setServerStartCode(this.startcode);<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      request.setServerCurrentTime(now);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    } catch (ServiceException se) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>            ioe);<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        // Re-throw IOE will cause RS to abort<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>        throw ioe;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        LOG.debug("Master is not running yet");<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>      } else {<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>        LOG.warn("error telling master we are up", se);<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>      }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      rssStub = null;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>    }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    return result;<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>  @Override<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>    try {<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      if (rss == null) { // Try to connect one more time<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>        createRegionServerStatusStub();<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>        rss = rssStub;<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>        if (rss == null) {<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>          // Still no luck, we tried<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>              .build();<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>        }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    } catch (ServiceException e) {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>          .build();<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>  }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span><a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>  /**<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>   * Close meta region if we carry it<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>   * @param abort Whether we're running an abort.<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>   */<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    HRegion meta = null;<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>    try {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>        if (hri.isMetaRegion()) {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>          meta = e.getValue();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>        }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>        if (meta != null) break;<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>      }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    } finally {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>  }<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span><a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>  /**<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   * Schedule closes on all user regions.<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>   * that are already closed or that are closing.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>   * @param abort Whether we're running an abort.<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>   */<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>  private void closeUserRegions(final boolean abort) {<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>    try {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        HRegion r = e.getValue();<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>          // Don't update zk with this close transition; pass false.<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>        }<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>      }<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>    } finally {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  /** @return the info server */<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public InfoServer getInfoServer() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return infoServer;<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * @return true if a stop has been requested.<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   */<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>  @Override<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>  public boolean isStopped() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>    return this.stopped;<a name="line.2887"></a>
+<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>   * Method will block until a master is available. You can break from this<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   * block by requesting the server stop.<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   *<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   * @return master + port, or null if server has been stopped<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   */<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>    return createRegionServerStatusStub(false);<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span><a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>  /**<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>   * You can break from this block by requesting the server stop.<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>   * @return master + port, or null if server has been stopped<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  @VisibleForTesting<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    if (rssStub != null) {<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      return masterAddressTracker.getMasterAddress();<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>    ServerName sn = null;<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    long previousLogTime = 0;<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    boolean interrupted = false;<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>    try {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>      while (keepLooping()) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>        if (sn == null) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>          if (!keepLooping()) {<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>            // give up with no connection.<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>            return null;<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>          }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>            LOG.debug("No master found; retry");<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>            previousLogTime = System.currentTimeMillis();<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>          }<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>          if (sleepInterrupted(200)) {<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            interrupted = true;<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>          }<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>          continue;<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>        }<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>        // If we are on the active master, use the shortcut<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          break;<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>        }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>        try {<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          BlockingRpcChannel channel =<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>              shortOperationTimeout);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>          break;<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>        } catch (IOException e) {<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>            e = e instanceof RemoteException ?<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>            } else {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>            }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>            previousLogTime = System.currentTimeMillis();<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>          }<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (sleepInterrupted(200)) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            interrupted = true;<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>        }<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>      }<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>    } finally {<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>      if (interrupted) {<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        Thread.currentThread().interrupt();<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    this.rssStub = intRssStub;<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>    this.lockStub = intLockStub;<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    return sn;<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>  }<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span><a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>  /**<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>   * @return True if we should break loop because cluster is going down or<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>   */<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  private boolean keepLooping() {<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>  }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span><a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  /*<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>   * us by the master.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>   * null if we failed to register.<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>   * @throws IOException<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>   */<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>    if (masterServerName == null || rss == null) return null;<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    RegionServerStartupResponse result = null;<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    try {<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>      rpcServices.requestCount.reset();<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      int port = rpcServices.isa.getPort();<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>      }<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      request.setPort(port);<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>      request.setServerStartCode(this.startcode);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>      request.setServerCurrentTime(now);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>    } catch (ServiceException se) {<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>            ioe);<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>        // Re-throw IOE will cause RS to abort<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>        throw ioe;<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>        LOG.debug("Master is not running yet");<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      } else {<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>        LOG.warn("error telling master we are up", se);<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      }<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>      rssStub = null;<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>    }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    return result;<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>    try {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>      if (rss == null) { // Try to connect one more time<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>        createRegionServerStatusStub();<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>        rss = rssStub;<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>        if (rss == null) {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>          // Still no luck, we tried<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>              .build();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>        }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      }<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>    } catch (ServiceException e) {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>          .build();<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    }<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span><a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>   * Close meta region if we carry it<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>   * @param abort Whether we're running an abort.<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>   */<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>    HRegion meta = null;<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>    try {<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>        if (hri.isMetaRegion()) {<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>          meta = e.getValue();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>        if (meta != null) break;<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      }<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    } finally {<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    }<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>  }<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span><a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>  /**<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   * Schedule closes on all user regions.<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>   * that are already closed or that are closing.<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>   * @param abort Whether we're running an abort.<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>   */<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  private void closeUserRegions(final boolean abort) {<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>    try {<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>        HRegion r = e.getValue();<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>          // Don't update zk with this close transition; pass false.<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>        }<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    } finally {<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>    }<a name="line.2887"></a>
 <span class="sourceLineNo">2888</span>  }<a name="line.2888"></a>
 <span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>  @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  public boolean isStopping() {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>    return this.stopping;<a name="line.2892"></a>
+<span class="sourceLineNo">2890</span>  /** @return the info server */<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>  public InfoServer getInfoServer() {<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>    return infoServer;<a name="line.2892"></a>
 <span class="sourceLineNo">2893</span>  }<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>  @Override<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public Configuration getConfiguration() {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    return conf;<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>  }<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span><a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    return this.onlineRegions;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>  public int getNumberOfOnlineRegions() {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    return this.onlineRegions.size();<a name="line.2905"></a>
+<span class="sourceLineNo">2895</span>  /**<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>   * @return true if a stop has been requested.<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>   */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>  @Override<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>  public boolean isStopped() {<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    return this.stopped;<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>  }<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span><a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>  @Override<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>  public boolean isStopping() {<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    return this.stopping;<a name="line.2905"></a>
 <span class="sourceLineNo">2906</span>  }<a name="line.2906"></a>
 <span class="sourceLineNo">2907</span><a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  /**<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>   * For tests, web ui and metrics.<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>   */<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    return Collections.unmodifiableCollection(regions);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  }<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span><a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>  @Override<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>  public void addRegion(HRegion region) {<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>    configurationManager.registerObserver(region);<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  }<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span><a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>      long size) {<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    }<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    sortedRegions.get(size).add(region);<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  /**<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>   *   the biggest.<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    // we'll sort the regions in reverse<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2940"></a>
+<span class="sourceLineNo">2908</span>  @Override<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  public Configuration getConfiguration() {<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    return conf;<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  }<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span><a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>    return this.onlineRegions;<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>  }<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span><a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>  public int getNumberOfOnlineRegions() {<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    return this.onlineRegions.size();<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>  }<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span><a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>  /**<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>   * For tests, web ui and metrics.<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>    return Collections.unmodifiableCollection(regions);<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>  }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span><a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  @Override<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>  public void addRegion(HRegion region) {<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    configurationManager.registerObserver(region);<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  }<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>      long size) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2940"></a>
 <span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>    return sortedRegions;<a name="line.2942"></a>
+<span class="sourceLineNo">2942</span>    sortedRegions.get(size).add(region);<a name="line.2942"></a>
 <span class="sourceLineNo">2943</span>  }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>  /**<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>   *   biggest.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    // we'll sort the regions in reverse<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>    }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>    return sortedRegions;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>  }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span><a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  /**<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>   * @return time stamp in millis of when this region server was started<a name="line.2960"></a>
+<span class="sourceLineNo">2944</span>  /**<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>   *   the biggest.<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   */<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    // we'll sort the regions in reverse<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>    }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>    return sortedRegions;<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>  }<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span><a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  /**<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>   *   biggest.<a name="line.2960"></a>
 <span class="sourceLineNo">2961</span>   */<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>  public long getStartcode() {<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>    return this.startcode;<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>  }<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span><a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>  /** @return reference to FlushRequester */<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>  @Override<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>  public FlushRequester getFlushRequester() {<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    return this.cacheFlusher;<a name="line.2969"></a>
+<span class="sourceLineNo">2962</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>    // we'll sort the regions in reverse<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>    }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>    return sortedRegions;<a name="line.2969"></a>
 <span class="sourceLineNo">2970</span>  }<a name="line.2970"></a>
 <span class="sourceLineNo">2971</span><a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>  @Override<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    return this.compactSplitThread;<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>  }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span><a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  @Override<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  public LeaseManager getLeaseManager() {<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    return leaseManager;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>  /**<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @return Return the rootDir.<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   */<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>  protected Path getDataRootDir() {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>    return dataRootDir;<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  }<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span><a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>  @Override<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  public FileSystem getFileSystem() {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    return dataFs;<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span><a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  /**<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   */<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>  boolean isDataFileSystemOk() {<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>    return this.dataFsOk;<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>  }<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span><a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>  /**<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   * @return Return the walRootDir.<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>   */<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>  public Path getWALRootDir() {<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    return walRootDir;<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>  }<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span><a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>  /**<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>   * @return Return the walFs.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>   */<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  public FileSystem getWALFileSystem() {<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>    return walFs;<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>  }<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span><a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>  @Override<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>  public String toString() {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>    return getServerName().toString();<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>  }<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>  @Override<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>  public ZKWatcher getZooKeeper() {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    return zooKeeper;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span><a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  @Override<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>    return csm;<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>  }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span><a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>  @Override<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>  public ServerName getServerName() {<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>    return serverName;<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span><a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>    return this.rsHost;<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  }<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span><a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  @Override<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    return this.regionsInTransitionInRS;<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>  }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span><a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>  @Override<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>  public ExecutorService getExecutorService() {<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>    return executorService;<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span><a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  @Override<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>  public ChoreService getChoreService() {<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>    return choreService;<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>  }<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span><a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>  @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return rsQuotaManager;<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>  }<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span><a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>  //<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>  // Main program and support routines<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  //<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>   * Load the replication executorService objects, if any<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>    // read in the name of the source replication class from the config file.<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span><a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>    // read in the name of the sink replication class from the config file.<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>    // only one object.<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>    } else {<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>    }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>  }<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span><a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      throw new IOException("Could not find class for " + classname);<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    }<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    return service;<a name="line.3101"></a>
+<span class="sourceLineNo">2972</span>  /**<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   * @return time stamp in millis of when this region server was started<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   */<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  public long getStartcode() {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>    return this.startcode;<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>  }<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span><a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>  /** @return reference to FlushRequester */<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>  @Override<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>  public FlushRequester getFlushRequester() {<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return this.cacheFlusher;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  @Override<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>    return this.compactSplitThread;<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>  }<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span><a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>  @Override<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>  public LeaseManager getLeaseManager() {<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    return leaseManager;<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * @return Return the rootDir.<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   */<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  protected Path getDataRootDir() {<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    return dataRootDir;<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>  }<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span><a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  @Override<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  public FileSystem getFileSystem() {<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>    return dataFs;<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  }<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span><a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>  /**<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   */<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  boolean isDataFileSystemOk() {<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    return this.dataFsOk;<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span><a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>   * @return Return the walRootDir.<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>   */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  public Path getWALRootDir() {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    return walRootDir;<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  }<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>  /**<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * @return Return the walFs.<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>  public FileSystem getWALFileSystem() {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    return walFs;<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>  }<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span><a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>  @Override<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  public String toString() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    return getServerName().toString();<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>  }<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span><a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>  @Override<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>  public ZKWatcher getZooKeeper() {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    return zooKeeper;<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span><a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>    return csm;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>  }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public ServerName getServerName() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    return serverName;<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    return this.rsHost;<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>  }<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span><a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>  @Override<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    return this.regionsInTransitionInRS;<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>  }<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span><a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  @Override<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public ExecutorService getExecutorService() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    return executorService;<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  }<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  @Override<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>  public ChoreService getChoreService() {<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    return choreService;<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  }<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span><a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>  @Override<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>    return rsQuotaManager;<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  }<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span><a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>  //<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>  // Main program and support routines<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  //<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>  /**<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   * Load the replication executorService objects, if any<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>   */<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>    // read in the name of the source replication class from the config file.<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span><a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    // read in the name of the sink replication class from the config file.<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span><a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    // only one object.<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>      server.sameReplicationSourceAndSink = true;<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>    } else {<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>      server.sameReplicationSourceAndSink = false;<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
 <span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
 <span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>    if(!this.isOnline()){<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>      return walGroupsReplicationStatus;<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>    }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>    }<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    return walGroupsReplicationStatus;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>  }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>  /**<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   */<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>  static HRegionServer constructRegionServer(<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      final Configuration conf<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>  ) {<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    try {<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      return c.newInstance(conf);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>    } catch (Exception e) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>          + regionServerClass.toString(), e);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>    }<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>  }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span><a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>  /**<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>   */<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>  public static void main(String[] args) {<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>    VersionInfo.logVersion();<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    @SuppressWarnings("unchecked")<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  }<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span><a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>  /**<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>   * Gets the online regions of the specified table.<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>   * all the ONLINE regions in the table.<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>   * @param tableName table to limit the scope of the query<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>   */<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>  @Override<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>     synchronized (this.onlineRegions) {<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>           tableRegions.add(region);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>         }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>       }<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>     }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>     return tableRegions;<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>   }<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span><a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>  @Override<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    List&lt;HRegion&gt; allRegions;<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>    synchronized (this.onlineRegions) {<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>      // Return a clone copy of the onlineRegions<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    }<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>    return allRegions;<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>  }<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span><a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>  /**<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   * Gets the online tables in this RS.<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * This method looks at the in-memory onlineRegions.<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return all the online tables in this RS<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   */<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    synchronized (this.onlineRegions) {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      }<a name="line.3193"></a>
+<span class="sourceLineNo">3104</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>    try {<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>      throw new IOException("Could not find class for " + classname);<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>    }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    return service;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>  }<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span><a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    if(!this.isOnline()){<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      return walGroupsReplicationStatus;<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>    }<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    }<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    return walGroupsReplicationStatus;<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>  }<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span><a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>  /**<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>   */<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>  static HRegionServer constructRegionServer(<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      final Configuration conf<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>  ) {<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>    try {<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>      return c.newInstance(conf);<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    } catch (Exception e) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          + regionServerClass.toString(), e);<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span><a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>  /**<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>   */<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>  public static void main(String[] args) {<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    VersionInfo.logVersion();<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>    @SuppressWarnings("unchecked")<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span><a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>  }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>  /**<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>   * Gets the online regions of the specified table.<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>   * all the ONLINE regions in the table.<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>   * @param tableName table to limit the scope of the query<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>   */<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>  @Override<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>     synchronized (this.onlineRegions) {<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>           tableRegions.add(region);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>         }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>       }<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>     }<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>     return tableRegions;<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>   }<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span><a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>  @Override<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    List&lt;HRegion&gt; allRegions;<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>    synchronized (this.onlineRegions) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>      // Return a clone copy of the onlineRegions<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3193"></a>
 <span class="sourceLineNo">3194</span>    }<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    return tables;<a name="line.3195"></a>
+<span class="sourceLineNo">3195</span>    return allRegions;<a name="line.3195"></a>
 <span class="sourceLineNo">3196</span>  }<a name="line.3196"></a>
 <span class="sourceLineNo">3197</span><a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>  public String[] getRegionServerCoprocessors() {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    try {<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>    } catch (IOException exception) {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>          "skipping.");<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>    }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    for (HRegion region: regions) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>      try {<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      } catch (IOException exception) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>            "; skipping.");<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>      }<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>    }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>    return coprocessors.toArray(new String[0]);<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>  }<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span><a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>  /**<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>   * @param region Region to close<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>   */<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>    try {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>            " - ignoring and continuing");<a name="line.3230"></a>
+<span class="sourceLineNo">3198</span>  /**<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>   * Gets the online tables in this RS.<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>   * This method looks at the in-memory onlineRegions.<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>   * @return all the online tables in this RS<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>   */<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>    synchronized (this.onlineRegions) {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      }<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>    }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>    return tables;<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>  }<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span><a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>  public String[] getRegionServerCoprocessors() {<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>    try {<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>    } catch (IOException exception) {<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>          "skipping.");<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>    }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    for (HRegion region: regions) {<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>      try {<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span>      } catch (IOException exception) {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>            "; skipping.");<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3230"></a>
 <span class="sourceLineNo">3231</span>      }<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    } catch (IOException e) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>          " - ignoring and continuing", e);<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    }<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  /**<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>   *<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>   * &lt;p&gt;<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>   * &lt;/p&gt;<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span><a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>   * &lt;p&gt;<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>   * &lt;/p&gt;<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>   *<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>   * @param encodedName Region to close<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>   * @param abort True if we are aborting<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>   * @return True if closed a region.<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>   * @throws NotServingRegionException if the region is not online<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>   */<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>        final ServerName destination)<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>      throws NotServingRegionException {<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>    //Check for permissions to close.<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>    // Can be null if we're calling close on a region that's not online<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>      try {<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>      } catch (IOException exp) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>        return false;<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>      }<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    }<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span><a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>    // previous can come back 'null' if not in map.<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>        Boolean.FALSE);<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span><a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>        // We're going to try to do a standard close then.<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>            " Doing a standard close now");<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>        return closeRegion(encodedName, abort, destination);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>      }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>      // Let's get the region from the online region list again<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>      actualRegion = this.getRegion(encodedName);<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>        // The master deletes the znode when it receives this exception.<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>      }<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>    } else if (previous == null) {<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      return true;<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>    }<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span><a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>    if (actualRegion == null) {<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>      // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>          " is not online, and is not opening.");<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>    }<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span><a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>    CloseRegionHandler crh;<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>    if (hri.isMetaRegion()) {<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>    } else {<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>    }<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>    this.executorService.submit(crh);<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    return true;<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span><a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>   /**<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>   *         named region is not member of the online regions.<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>   */<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>  }<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span><a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>  @Override<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>  }<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span><a name="line.3334"></a>
+<span class="sourceLineNo">3232</span>    }<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>    return coprocessors.toArray(new String[0]);<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>  }<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span><a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>  /**<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>   * @param region Region to close<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>   */<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    try {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>            " - ignoring and continuing");<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>      }<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>    } catch (IOException e) {<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>          " - ignoring and continuing", e);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>    }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>  }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span><a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>  /**<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>   *<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>   * &lt;p&gt;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>   * &lt;/p&gt;<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span><a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * &lt;p&gt;<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>   * &lt;/p&gt;<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>   *<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * @param encodedName Region to close<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * @param abort True if we are aborting<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>   * @return True if closed a region.<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>   * @throws NotServingRegionException if the region is not online<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>   */<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>        final ServerName destination)<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>      throws NotServingRegionException {<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>    //Check for permissions to close.<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>    // Can be null if we're calling close on a region that's not online<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>      try {<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>      } catch (IOException exp) {<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>        return false;<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>      }<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    }<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span><a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>    // previous can come back 'null' if not in map.<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>        Boolean.FALSE);<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span><a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>        // We're going to try to do a standard close then.<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>            " Doing a standard close now");<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>        return closeRegion(encodedName, abort, destination);<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>      }<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>      // Let's get the region from the online region list again<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>      actualRegion = this.getRegion(encodedName);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>        // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>      }<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    } else if (previous == null) {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>      return true;<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>    }<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span><a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>    if (actualRegion == null) {<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>      // The master deletes the znode when it receives this exception.<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>          " is not online, and is not opening.");<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>    }<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span><a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>    CloseRegionHandler crh;<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>    if (hri.isMetaRegion()) {<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>    } else {<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    }<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    this.executorService.submit(crh);<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>    return true;<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>  }<a name="line.3334"></a>
 <span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>  @Override<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>    if (destination != null) {<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>      }<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>      if (selfMove) {<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>      }<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    }<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>    configurationManager.deregisterObserver(r);<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>    return toReturn != null;<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>  }<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span><a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>  /**<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>   *<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>   */<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      throws NotServingRegionException {<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  }<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span><a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>      throws NotServingRegionException {<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>  }<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span><a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>    throws NotServingRegionException {<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>    if (region == null) {<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>      if (moveInfo != null) {<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>      }<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>      String regionNameStr = regionName == null?<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>          " is opening on " + this.serverName);<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>      }<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>        " is not online on " + this.serverName);<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>    }<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return region;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  /**<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>   * IOE if it isn't already.<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>   *<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>   * @param t Throwable<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>   * @param msg Message to log in error. Can be null.<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>   */<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>    if (t instanceof NotServingRegionException) {<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>      return t;<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>    }<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>    if (msg == null) {<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>      LOG.error("", e);<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>    } else {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>      LOG.error(msg, e);<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    }<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      checkFileSystem();<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>    }<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>    return t;<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>  }<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span><a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  /**<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>   */<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>  }<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span><a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>  /**<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * abortRequested and stopRequested<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   *<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @return false if file system is not available<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   */<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>  boolean checkFileSystem() {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>      try {<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>      } catch (IOException e) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>        abort("File System not available", e);<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>        this.dataFsOk = false;<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      }<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>    }<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>    return this.dataFsOk;<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>  }<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span><a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>  @Override<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>          favoredNodes.get(i).getPort());<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>  }<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span><a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>  /**<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>   *<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>   * @return array of favored locations<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>   */<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>  @Override<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span><a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  @Override<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>  public ServerNonceManager getNonceManager() {<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>    return this.nonceManager;<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>  }<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span><a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  private static class MovedRegionInfo {<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>    private final ServerName serverName;<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>    private final long seqNum;<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span><a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>      this.serverName = serverName;<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>      this.seqNum = closeSeqNum;<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>     }<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span><a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>    public ServerName getServerName() {<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>      return serverName;<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>    }<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span><a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>    public long getSeqNum() {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      return seqNum;<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>    }<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>  }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span><a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>  /**<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>   * the number of network calls instead of reducing them.<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>   */<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3501"></a>
+<span class="sourceLineNo">3336</span>   /**<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>   *         named region is not member of the online regions.<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>   */<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>  }<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span><a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>  @Override<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>  }<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span><a name="line.3349"></a>
+<span class="sourceLineNo">3350</span><a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>  @Override<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    if (destination != null) {<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      }<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>      if (selfMove) {<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>    }<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>    configurationManager.deregisterObserver(r);<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>    return toReturn != null;<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>  }<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span><a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>  /**<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   *<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   */<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>      throws NotServingRegionException {<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  }<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span><a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      throws NotServingRegionException {<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>  }<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span><a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>    throws NotServingRegionException {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    if (region == null) {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>      if (moveInfo != null) {<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>      }<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>      String regionNameStr = regionName == null?<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>          " is opening on " + this.serverName);<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>      }<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>        " is not online on " + this.serverName);<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>    }<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>    return region;<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>  }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span><a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>  /**<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>   * IOE if it isn't already.<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>   *<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>   * @param t Throwable<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>   * @param msg Message to log in error. Can be null.<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>   */<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    if (t instanceof NotServingRegionException) {<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>      return t;<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>    }<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>    if (msg == null) {<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>      LOG.error("", e);<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>    } else {<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>      LOG.error(msg, e);<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>    }<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>      checkFileSystem();<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>    }<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>    return t;<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>  }<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span><a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>  /**<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   */<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>  }<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span><a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>  /**<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>   * abortRequested and stopRequested<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>   *<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>   * @return false if file system is not available<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>   */<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>  boolean checkFileSystem() {<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>      try {<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      } catch (IOException e) {<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>        abort("File System not available", e);<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>        this.dataFsOk = false;<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>      }<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>    }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>    return this.dataFsOk;<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>  }<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span><a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>  @Override<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>          favoredNodes.get(i).getPort());<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    }<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>  }<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span><a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>  /**<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   *<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   * @return array of favored locations<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>   */<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>  @Override<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>  }<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span><a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>  @Override<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>  public ServerNonceManager getNonceManager() {<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>    return this.nonceManager;<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>  }<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span><a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>  private static class MovedRegionInfo {<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>    private final ServerName serverName;<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    private final long seqNum;<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span><a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>      this.serverName = serverName;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>      this.seqNum = closeSeqNum;<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>     }<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span><a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>    if (selfMove) {<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>      return;<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>    }<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>        closeSeqNum);<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span><a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>  }<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span><a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>  @VisibleForTesting<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>  }<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span><a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>  @VisibleForTesting<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>  public int movedRegionCacheExpiredTime() {<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>        return TIMEOUT_REGION_MOVED;<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>  }<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span><a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>  private String getMyEphemeralNodePath() {<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>  }<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span><a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>  private boolean isHealthCheckerConfigured() {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>  }<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span><a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>  /**<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>   */<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>  public CompactSplit getCompactSplitThread() {<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>    return this.compactSplitThread;<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>  }<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span><a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>    try {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>      String serviceName = call.getServiceName();<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>      if (service == null) {<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>            serviceName);<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>      }<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>      ServiceDescriptor serviceDesc =<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>          service.getDescriptorForType();<a name="line.3556"></a>
+<span class="sourceLineNo">3503</span>    public ServerName getServerName() {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>      return serverName;<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>    }<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span><a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>    public long getSeqNum() {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>      return seqNum;<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>    }<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span><a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>   * the number of network calls instead of reducing them.<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span><a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>    if (selfMove) {<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>      return;<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>    }<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>        closeSeqNum);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>  }<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span><a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>  }<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span><a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  @VisibleForTesting<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>  }<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span><a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>  @VisibleForTesting<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>  public int movedRegionCacheExpiredTime() {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        return TIMEOUT_REGION_MOVED;<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>  }<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  private String getMyEphemeralNodePath() {<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>  }<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span><a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>  private boolean isHealthCheckerConfigured() {<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>  }<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span><a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>  /**<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>   */<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>  public CompactSplit getCompactSplitThread() {<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>    return this.compactSplitThread;<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>  }<a name="line.3556"></a>
 <span class="sourceLineNo">3557</span><a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>      String methodName = call.getMethodName();<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>      MethodDescriptor methodDesc =<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>          serviceDesc.findMethodByName(methodName);<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>      if (methodDesc == null) {<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>            " called on executorService " + serviceName);<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>      }<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span><a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>      Message request =<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>      final Message.Builder responseBuilder =<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>        if (message != null) {<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>          responseBuilder.mergeFrom(message);<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>        }<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      });<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>      if (exception != null) {<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>        throw exception;<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>      }<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>    } catch (IOException ie) {<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>      throw new ServiceException(ie);<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>    }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>  }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span><a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>  /**<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>   * May be null if this is a master which not carry table.<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>   *<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>   * @return The block cache instance used by the regionserver.<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>   */<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>  @Override<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>    return Optional.ofNullable(this.blockCache);<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>  }<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span><a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>  /**<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>   * May be null if this is a master which not carry table.<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>   *<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>   * @return The cache for mob files used by the regionserver.<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>   */<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>  @Override<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>  }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span><a name="line.3604"></a>
+<span class="sourceLineNo">3558</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>    try {<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>      String serviceName = call.getServiceName();<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>      if (service == null) {<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>            serviceName);<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>      }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>      ServiceDescriptor serviceDesc =<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>          service.getDescriptorForType();<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span><a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>      String methodName = call.getMethodName();<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>      MethodDescriptor methodDesc =<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>          serviceDesc.findMethodByName(methodName);<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>      if (methodDesc == null) {<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>            " called on executorService " + serviceName);<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>      }<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span><a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>      Message request =<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>      final Message.Builder responseBuilder =<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>        if (message != null) {<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>          responseBuilder.mergeFrom(message);<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>        }<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      });<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      if (exception != null) {<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>        throw exception;<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>      }<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>    } catch (IOException ie) {<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>      throw new ServiceException(ie);<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>    }<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  }<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span><a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>  /**<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>   * May be null if this is a master which not carry table.<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>   *<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>   * @return The block cache instance used by the regionserver.<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>   */<a name="line.3604"></a>
 <span class="sourceLineNo">3605</span>  @Override<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>  public AccessChecker getAccessChecker() {<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>    return rpcServices.getAccessChecker();<a name="line.3607"></a>
+<span class="sourceLineNo">3606</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>    return Optional.ofNullable(this.blockCache);<a name="line.3607"></a>
 <span class="sourceLineNo">3608</span>  }<a name="line.3608"></a>
 <span class="sourceLineNo">3609</span><a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>  @Override<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>  }<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span><a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>  /**<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>   */<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>  @VisibleForTesting<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>  ConfigurationManager getConfigurationManager() {<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    return configurationManager;<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>  }<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span><a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>  /**<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>   * @return Return table descriptors implementation.<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>   */<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>  @Override<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>  public TableDescriptors getTableDescriptors() {<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    return this.tableDescriptors;<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>  }<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span><a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  /**<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>   * Reload the configuration from disk.<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>   */<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>  void updateConfiguration() {<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>    // Reload the configuration from disk.<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>    conf.reloadConfiguration();<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>    configurationManager.notifyAllObservers(conf);<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>  }<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span><a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>    long evictedBlocks = 0;<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span><a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>    for(Store store : region.getStores()) {<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>      }<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>    }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span><a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>    return CacheEvictionStats.builder()<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>        .build();<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>  }<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span><a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>  @Override<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>  public double getCompactionPressure() {<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>    double max = 0;<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    for (Region region : onlineRegions.values()) {<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>      for (Store store : region.getStores()) {<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>        double normCount = store.getCompactionPressure();<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>        if (normCount &gt; max) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>          max = normCount;<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>        }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>      }<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>    }<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>    return max;<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>  }<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span><a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>  @Override<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>    return hMemManager;<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>  }<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span><a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    return cacheFlusher;<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span><a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>  /**<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>   * For testing<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>   */<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>  @VisibleForTesting<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>  public boolean walRollRequestFinished() {<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    return this.walRoller.walRollFinished();<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>  }<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span><a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>  @Override<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>  public ThroughputController getFlushThroughputController() {<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>    return flushThroughputController;<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  }<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span><a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>  @Override<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>  public double getFlushPressure() {<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>      // return 0 during RS initialization<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>      return 0.0;<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    }<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span>  }<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span><a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>  @Override<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>    ThroughputController old = this.flushThroughputController;<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>    if (old != null) {<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>      old.stop("configuration change");<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>    }<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>    try {<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      Superusers.initialize(newConf);<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>    } catch (IOException e) {<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3711"></a>
+<span class="sourceLineNo">3610</span>  /**<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>   * May be null if this is a master which not carry table.<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>   *<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>   * @return The cache for mob files used by the regionserver.<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>   */<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>  @Override<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>  }<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span><a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>  @Override<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>  public AccessChecker getAccessChecker() {<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    return rpcServices.getAccessChecker();<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>  }<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span><a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>  @Override<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>  }<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span><a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>  /**<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>   */<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>  @VisibleForTesting<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  ConfigurationManager getConfigurationManager() {<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>    return configurationManager;<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>  }<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span><a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>  /**<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>   * @return Return table descriptors implementation.<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>   */<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>  @Override<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>  public TableDescriptors getTableDescriptors() {<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    return this.tableDescriptors;<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>  }<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span><a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>  /**<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>   * Reload the configuration from disk.<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>   */<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>  void updateConfiguration() {<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>    // Reload the configuration from disk.<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>    conf.reloadConfiguration();<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>    configurationManager.notifyAllObservers(conf);<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>  }<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span><a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>    long evictedBlocks = 0;<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span><a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    for(Store store : region.getStores()) {<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>      }<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    }<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span><a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>    return CacheEvictionStats.builder()<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>        .build();<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>  }<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span><a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>  @Override<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>  public double getCompactionPressure() {<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>    double max = 0;<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>    for (Region region : onlineRegions.values()) {<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>      for (Store store : region.getStores()) {<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        double normCount = store.getCompactionPressure();<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>        if (normCount &gt; max) {<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span>          max = normCount;<a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>        }<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      }<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>    return max;<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>  }<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span><a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>  @Override<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>    return hMemManager;<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>  }<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span><a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    return cacheFlusher;<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  /**<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>   * For testing<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>   */<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>  @VisibleForTesting<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>  public boolean walRollRequestFinished() {<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>    return this.walRoller.walRollFinished();<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>  }<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span><a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>  @Override<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>  public ThroughputController getFlushThroughputController() {<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>    return flushThroughputController;<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span><a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>  @Override<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  public double getFlushPressure() {<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>      // return 0 during RS initialization<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      return 0.0;<a name="line.3711"></a>
 <span class="sourceLineNo">3712</span>    }<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>  }<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span><a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>  @Override<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>  public MetricsRegionServer getMetrics() {<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>    return metricsRegionServer;<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>  }<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span><a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>  @Override<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>    return this.secureBulkLoadManager;<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>  }<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span><a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>  @Override<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      final Abortable abort) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>    final LockServiceClient client =<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>  }<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span><a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>  @Override<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>  }<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span><a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>  @Override<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>    return this.rsSpaceQuotaManager;<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>  }<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span><a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>  @Override<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>      // the current server could be stopping.<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>      return false;<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>    }<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>    try {<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>      rss.reportFileArchival(null, request);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>    } catch (ServiceException se) {<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>        if (LOG.isTraceEnabled()) {<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>              + " This will be retried.", ioe);<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>        }<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>        return false;<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>      }<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>      if (rssStub == rss) {<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>        rssStub = null;<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>      }<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>      // re-create the stub if we failed to report the archival<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>      createRegionServerStatusStub(true);<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>      return false;<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>    }<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>    return true;<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>  }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>    return eventLoopGroupConfig;<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>  }<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span><a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>  @Override<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>  }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span><a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>  }<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span><a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>    procedureResultReporter.complete(procId, error);<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>  }<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span><a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>    for (;;) {<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>      rss = rssStub;<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>      if (rss != null) {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>        break;<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>      }<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>      createRegionServerStatusStub();<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>    }<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>    try {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>      rss.reportProcedureDone(null, request);<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>    } catch (ServiceException se) {<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>      if (rssStub == rss) {<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>        rssStub = null;<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>      }<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>    }<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>  }<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span><a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>  /**<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>   *<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>   *<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>   *<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>   * See HBASE-22404 for more details.<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>   *<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>   * @param procId the id of the open/close region procedure<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>   * @return true if the procedure can be submitted.<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>   */<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>  boolean submitRegionProcedure(long procId) {<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>    if (procId == -1) {<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      return true;<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>    }<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>    // Ignore the region procedures which already submitted.<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>    if (previous != null) {<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>      return false;<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>    }<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>    // Ignore the region procedures which already executed.<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>      return false;<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>    }<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>    return true;<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>  }<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span><a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>  /**<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>   * @param procId the id of the open/close region procedure<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>   */<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span>  public void finishRegionProcedure(long procId) {<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>    executedRegionProcedures.put(procId, procId);<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>    submittedRegionProcedures.remove(procId);<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>  }<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span><a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>  public boolean isShutDown() {<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>    return shutDown;<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>  }<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span><a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>  /**<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>   * Force to terminate region server when abort timeout.<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>   */<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span><a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>    public SystemExitWhenAbortTimeout() {<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>    }<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span><a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>    @Override<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>    public void run() {<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>          " Thread dump to stdout.");<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>      Runtime.getRuntime().halt(1);<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>    }<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>  }<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span><a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>  @Override<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>    return asyncClusterConnection;<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>  }<a name="line.3885"></a>
+<span class="sourceLineNo">3713</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  }<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span><a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    ThroughputController old = this.flushThroughputController;<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>    if (old != null) {<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>      old.stop("configuration change");<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>    }<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    try {<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>      Superusers.initialize(newConf);<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    } catch (IOException e) {<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    }<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>  }<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span><a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>  @Override<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>  public MetricsRegionServer getMetrics() {<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span>    return metricsRegionServer;<a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>  }<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span><a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>  @Override<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>    return this.secureBulkLoadManager;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>  }<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span><a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>  @Override<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>      final Abortable abort) {<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>    final LockServiceClient client =<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>  }<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span><a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>  @Override<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>  }<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span><a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>  @Override<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>    return this.rsSpaceQuotaManager;<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>  }<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span><a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>  @Override<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>      // the current server could be stopping.<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>      return false;<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>    }<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>    try {<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>      rss.reportFileArchival(null, request);<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>    } catch (ServiceException se) {<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        if (LOG.isTraceEnabled()) {<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>              + " This will be retried.", ioe);<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>        }<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>        return false;<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>      if (rssStub == rss) {<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>        rssStub = null;<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      }<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>      // re-create the stub if we failed to report the archival<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>      createRegionServerStatusStub(true);<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>      return false;<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    }<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>    return true;<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span><a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>    return eventLoopGroupConfig;<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>  }<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span><a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  @Override<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>  }<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span><a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>  }<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span><a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>    procedureResultReporter.complete(procId, error);<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>  }<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span><a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>    for (;;) {<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>      rss = rssStub;<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      if (rss != null) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>        break;<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>      }<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>      createRegionServerStatusStub();<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>    }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span>    try {<a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>      rss.reportProcedureDone(null, request);<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>    } catch (ServiceException se) {<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>      if (rssStub == rss) {<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>        rssStub = null;<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span>      }<a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>    }<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>  }<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span><a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>  /**<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>   *<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>   *<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>   *<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>   * See HBASE-22404 for more details.<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>   *<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>   * @param procId the id of the open/close region procedure<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>   * @return true if the procedure can be submitted.<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>   */<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>  boolean submitRegionProcedure(long procId) {<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>    if (procId == -1) {<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>      return true;<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>    }<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>    // Ignore the region procedures which already submitted.<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>    if (previous != null) {<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span>      return false;<a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>    }<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>    // Ignore the region procedures which already executed.<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>      return false;<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span>    }<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>    return true;<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>  }<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span><a name="line.3865"></a>
+<span class="sourceLineNo">3866</span>  /**<a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>   * @param procId the id of the open/close region procedure<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>   */<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>  public void finishRegionProcedure(long procId) {<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>    executedRegionProcedures.put(procId, procId);<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span>    submittedRegionProcedures.remove(procId);<a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>  }<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span><a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>  public boolean isShutDown() {<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>    return shutDown;<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  }<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span><a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  /**<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span>   * Force to terminate region server when abort timeout.<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>   */<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span><a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>    public SystemExitWhenAbortTimeout() {<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>    }<a name="line.3885"></a>
 <span class="sourceLineNo">3886</span><a name="line.3886"></a>
-<span class="sourceLineNo">3887</span>  @VisibleForTesting<a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>    return compactedFileDischarger;<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>  }<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>}<a name="line.3891"></a>
+<span class="sourceLineNo">3887</span>    @Override<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span>    public void run() {<a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>          " Thread dump to stdout.");<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>      Runtime.getRuntime().halt(1);<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>    }<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>  }<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span><a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>  @Override<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span>    return asyncClusterConnection;<a name="line.3899"></a>
+<span class="sourceLineNo">3900</span>  }<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span><a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>  @VisibleForTesting<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>    return compactedFileDischarger;<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>  }<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>}<a name="line.3906"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
index b694c3c..7f9cc0d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.SystemExitWhenAbortTimeout.html
@@ -309,3594 +309,3609 @@
 <span class="sourceLineNo">301</span>  // Replication services. If no replication, this handler will be null.<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  // Compactions<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * encoded region name.  All access should be synchronized.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<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>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and here we really mean DataNode locations.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private LeaseManager leaseManager;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Instance of the hbase executor executorService.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected ExecutorService executorService;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private volatile boolean dataFsOk;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private HFileSystem dataFs;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private HFileSystem walFs;<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // Set when a report to the master comes back with a message asking us to<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  // of HRegionServer in isolation.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private volatile boolean stopped = false;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // debugging and unit tests.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private AtomicBoolean abortRequested;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // Default abort timeout is 1200 seconds for safe<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  // Will run this task when abort timeout<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // space regions.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private boolean stopping = false;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  private volatile boolean killed = false;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private volatile boolean shutDown = false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  protected final Configuration conf;<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private Path dataRootDir;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private Path walRootDir;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private final int threadWakeFrequency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  final int msgInterval;<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  private final int compactionCheckFrequency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int flushCheckFrequency;<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  // Stub to do region server status calls against the master.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private RpcClient rpcClient;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  // into web context.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  protected InfoServer infoServer;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private JvmPauseMonitor pauseMonitor;<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>  /** region server process name */<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public static final String REGIONSERVER = "regionserver";<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">304</span>  private boolean sameReplicationSourceAndSink;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // Compactions<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * encoded region name.  All access should be synchronized.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * and here we really mean DataNode locations.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private LeaseManager leaseManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  // Instance of the hbase executor executorService.<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  protected ExecutorService executorService;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private volatile boolean dataFsOk;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private HFileSystem dataFs;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private HFileSystem walFs;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  // Set when a report to the master comes back with a message asking us to<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  // of HRegionServer in isolation.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  private volatile boolean stopped = false;<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  // debugging and unit tests.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  private AtomicBoolean abortRequested;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  // Default abort timeout is 1200 seconds for safe<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  // Will run this task when abort timeout<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  // space regions.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  private boolean stopping = false;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  private volatile boolean killed = false;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean shutDown = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  protected final Configuration conf;<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  private Path dataRootDir;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private Path walRootDir;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private final int threadWakeFrequency;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  final int msgInterval;<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private final int compactionCheckFrequency;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private final int flushCheckFrequency;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  // Stub to do region server status calls against the master.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RpcClient rpcClient;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  // into web context.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  protected InfoServer infoServer;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private JvmPauseMonitor pauseMonitor;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  /** region server process name */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public static final String REGIONSERVER = "regionserver";<a name="line.388"></a>
 <span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private MetricsRegionServer metricsRegionServer;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private ScheduledChore periodicFlusher;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  private volatile WALFactory walFactory;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>  private LogRoller walRoller;<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  // A thread which calls reportProcedureDone<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // flag set after we're done setting up server threads<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // zookeeper connection and watcher<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  protected final ZKWatcher zooKeeper;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  // master address tracker<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  // Cluster Status Tracker<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // Log Splitting Worker<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private SplitLogWorker splitLogWorker;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  // A sleeper that sleeps for msgInterval.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected final Sleeper sleeper;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private final int shortOperationTimeout;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Block cache<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  private BlockCache blockCache;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  // The cache for mob files<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private MobFileCache mobFileCache;<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  /** The health check chore. */<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  private HealthCheckChore healthCheckChore;<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>  /** The Executor status collect chore. */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private ExecutorStatusChore executorStatusChore;<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  /** The nonce manager chore. */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  private ScheduledChore nonceManagerChore;<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * against Master.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  protected String useThisHostnameInstead;<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Exception will be thrown if both are used.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  protected String clusterId;<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  // chore for refreshing store files for secondary regions<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private StorefileRefresherChore storefileRefresher;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  private RegionServerCoprocessorHost rsHost;<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * HBASE-3787) are:<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>  final ServerNonceManager nonceManager;<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>  private UserProvider userProvider;<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  protected final RSRpcServices rpcServices;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  private CoordinatedStateManager csm;<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  /**<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   */<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  protected final ConfigurationManager configurationManager;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  @VisibleForTesting<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  private volatile ThroughputController flushThroughputController;<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Provide online slow log responses from ringbuffer<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  private NamedQueueRecorder namedQueueRecorder = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   */<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  private final boolean masterless;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  /**regionserver codec list **/<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  // A timer to shutdown the process if abort takes too long<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * &lt;p/&gt;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * Don't start any services or managers in here in the Constructor.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   */<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    super("RegionServer");  // thread name<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    TraceUtil.initTracer(conf);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    try {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      this.startcode = System.currentTimeMillis();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      this.conf = conf;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      this.dataFsOk = true;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      HFile.checkHFileVersion(this.conf);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      checkCodecs(this.conf);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>      // Disable usage of meta replicas in the regionserver<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      // Config'ed params<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.594"></a>
-<span class="sourceLineNo">595</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      this.stopped = false;<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>      initNamedQueueRecorder(conf);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      rpcServices = createRpcServices();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      String hostName =<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.604"></a>
-<span class="sourceLineNo">605</span>              : this.useThisHostnameInstead;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>      // login the zookeeper client principal (if using security)<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      // login the server principal (if using secure Hadoop)<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      login(userProvider, hostName);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // init superusers and add the server principal (if using security)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // or process owner as default super user.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Superusers.initialize(conf);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      boolean isMasterNotCarryTable =<a name="line.618"></a>
-<span class="sourceLineNo">619</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (!isMasterNotCarryTable) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        mobFileCache = new MobFileCache(conf);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>      uncaughtExceptionHandler =<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      initializeFileSystem();<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>      this.configurationManager = new ConfigurationManager();<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      // Open connection to zookeeper and set primary watcher<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        canCreateBaseZNode());<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      if (!this.masterless) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          this.csm = new ZkCoordinatedStateManager(this);<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>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        masterAddressTracker.start();<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        clusterStatusTracker.start();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      } else {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        masterAddressTracker = null;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        clusterStatusTracker = null;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.rpcServices.start(zooKeeper);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      // class HRS. TODO.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      this.choreService = new ChoreService(getName(), true);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      this.executorService = new ExecutorService(getName());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      putUpWebUI();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    } catch (Throwable t) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // cause of failed startup is lost.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.error("Failed construction RegionServer", t);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      throw t;<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>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    if (!(this instanceof HMaster)) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      if (isOnlineLogProviderEnabled) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    } else {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final boolean isBalancerDecisionRecording = conf<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      if (isBalancerDecisionRecording) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>  }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>  // HMaster should override this method to load the specific config for master<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        throw new IOException(msg);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      } else {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        return rpcServices.isa.getHostName();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    } else {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      return hostname;<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">709</span>   * If running on Windows, do windows-specific setup.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   */<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        conf.reloadConfiguration();<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        cm.notifyAllObservers(conf);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      });<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    NettyEventLoopGroupConfig nelgc =<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    return nelgc;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>  private void initializeFileSystem() throws IOException {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    // (unless all is set to defaults).<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<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>  protected void login(UserProvider user, String host) throws IOException {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Wait for an active Master.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * See override in Master superclass for how it is used.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  protected void waitForMasterActive() {}<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected String getProcessName() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return REGIONSERVER;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  protected boolean canCreateBaseZNode() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return this.masterless;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  protected boolean canUpdateTableDescriptor() {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    return false;<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  }<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    return new RSRpcServices(this);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span>  protected void configureInfoServer() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    return RSDumpServlet.class;<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  }<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>  @Override<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean registerService(Service instance) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    // No stacking of instances is allowed for a single executorService name<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        " already registered, rejecting request from " + instance);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      return false;<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>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    if (LOG.isDebugEnabled()) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      LOG.debug(<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    return true;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>  }<a name="line.803"></a>
-<span class="sourceLineNo">804</span><a name="line.804"></a>
-<span class="sourceLineNo">805</span>  private Configuration cleanupConfiguration() {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    Configuration conf = this.conf;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    //   masters' availability.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    //   other internal connections too.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.817"></a>
-<span class="sourceLineNo">818</span>      // the conf and unset the client ZK related properties<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      conf = new Configuration(this.conf);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return conf;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   */<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    // check to see if the codec list is available:<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    if (codecs == null) return;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (String codec : codecs) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        throw new IOException("Compression codec " + codec +<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          " not supported, aborting RS construction");<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      }<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    }<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  }<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>  public String getClusterId() {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    return this.clusterId;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>  /**<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * Setup our cluster connection if not already initialized.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   */<a name="line.846"></a>
-<span class="sourceLineNo">847</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (asyncClusterConnection == null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      Configuration conf = cleanupConfiguration();<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      User user = userProvider.getCurrent();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      asyncClusterConnection =<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  /**<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  private void preRegistrationInitialization() {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    try {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      initializeZooKeeper();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>      setupClusterConnection();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      // Setup RPC client for master communication<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    } catch (Throwable t) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      // Call stop if error or process will stick around for ever since server<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      // puts up non-daemon threads.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      this.rpcServices.stop();<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  /**<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Finally open long-living server short-circuit connection.<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   */<a name="line.881"></a>
-<span class="sourceLineNo">882</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    justification="cluster Id znode read would give us correct response")<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Nothing to do in here if no Master in the mix.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (this.masterless) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      return;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    // block until a master is available.  No point in starting up if no master<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    // running.<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    // when ready.<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    if (clusterId == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      // Retrieve clusterId<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      // Since cluster status is now up<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      // ID should have already been set by HMaster<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      try {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        if (clusterId == null) {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          this.abort("Cluster ID has not been set");<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>        LOG.info("ClusterId : " + clusterId);<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      } catch (KeeperException e) {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      }<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    }<a name="line.913"></a>
-<span class="sourceLineNo">914</span><a name="line.914"></a>
-<span class="sourceLineNo">915</span>    waitForMasterActive();<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    if (isStopped() || isAborted()) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      return; // No need for further initialization<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    }<a name="line.918"></a>
-<span class="sourceLineNo">919</span><a name="line.919"></a>
-<span class="sourceLineNo">920</span>    // watch for snapshots and other procedures<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    try {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      rspmHost.loadProcedures(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      rspmHost.initialize(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    } catch (KeeperException e) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.929"></a>
-<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.931"></a>
-<span class="sourceLineNo">932</span>   * if the region server is shut down<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   * @param tracker znode tracker to use<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   */<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.937"></a>
-<span class="sourceLineNo">938</span>      throws IOException, InterruptedException {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      if (this.stopped) {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      }<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  /**<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * @return True if the cluster is up.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>   */<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @Override<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  public boolean isClusterUp() {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    return this.masterless ||<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.952"></a>
-<span class="sourceLineNo">953</span>  }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>  /**<a name="line.955"></a>
-<span class="sourceLineNo">956</span>   * The HRegionServer sticks in this loop until closed.<a name="line.956"></a>
-<span class="sourceLineNo">957</span>   */<a name="line.957"></a>
-<span class="sourceLineNo">958</span>  @Override<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  public void run() {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (isStopped()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.info("Skipping run; stopped");<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>      preRegistrationInitialization();<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    } catch (Throwable e) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      abort("Fatal exception during initialization", e);<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    }<a name="line.969"></a>
-<span class="sourceLineNo">970</span><a name="line.970"></a>
-<span class="sourceLineNo">971</span>    try {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        // come up.<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        LOG.debug("About to register with Master.");<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        RetryCounterFactory rcf =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        RetryCounter rc = rcf.create();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        while (keepLooping()) {<a name="line.986"></a>
-<span class="sourceLineNo">987</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>          if (w == null) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.989"></a>
-<span class="sourceLineNo">990</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            this.sleeper.sleep(sleepTime);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>          } else {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>            handleReportForDutyResponse(w);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>            break;<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          }<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      }<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>        // start the snapshot handler and other procedure handlers,<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        // since the server is ready to run<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>        if (this.rspmHost != null) {<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          this.rspmHost.start();<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>        }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        // Start the Quota Manager<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>        if (this.rsQuotaManager != null) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          this.rsSpaceQuotaManager.start();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span><a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // We registered with the Master.  Go into run mode.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      long lastMsg = System.currentTimeMillis();<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      long oldRequestCount = -1;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // The main run loop.<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        if (!isClusterUp()) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>          if (onlineRegions.isEmpty()) {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>          } else if (!this.stopping) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>            this.stopping = true;<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>            LOG.info("Closing user regions");<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>            closeUserRegions(this.abortRequested.get());<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>          } else {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            if (allUserRegionsOffline) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              // Set stopped if no more write requests tp meta tables<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>              // since last time we went around the loop.  Any open<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>              // meta regions will be closed on our way out.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>                break;<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>              }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>              oldRequestCount = getWriteRequestCount();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>            } else {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>              // Make sure all regions have been closed -- some regions may<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>              // have not got it because we were splitting at the time of<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>              // the call to closeUserRegions.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>              closeUserRegions(this.abortRequested.get());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>        long now = System.currentTimeMillis();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          tryRegionServerReport(lastMsg, now);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          lastMsg = System.currentTimeMillis();<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>        }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>          this.sleeper.sleep();<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>        }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      } // for<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    } catch (Throwable t) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>        abort(prefix + t.getMessage(), t);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    if (this.leaseManager != null) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    if (this.splitLogWorker != null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>      splitLogWorker.stop();<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    if (this.infoServer != null) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.info("Stopping infoServer");<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      try {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>        this.infoServer.stop();<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      } catch (Exception e) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    }<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // Send cache a shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    if (blockCache != null) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      blockCache.shutdown();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (mobFileCache != null) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      mobFileCache.shutdown();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span><a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span><a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (rspmHost != null) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (this.killed) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    } else if (abortRequested.get()) {<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      if (this.dataFsOk) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      LOG.info("aborting server " + this.serverName);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    } else {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      closeUserRegions(abortRequested.get());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      LOG.info("stopping server " + this.serverName);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    if (this.asyncClusterConnection != null) {<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>      try {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>        this.asyncClusterConnection.close();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      } catch (IOException e) {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      }<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    }<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        if (this.compactSplitThread != null) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>          this.compactSplitThread.join();<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          this.compactSplitThread = null;<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    }<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    // Stop the quota manager<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    if (rsQuotaManager != null) {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsQuotaManager.stop();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    if (rsSpaceQuotaManager != null) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      rsSpaceQuotaManager.stop();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager = null;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    // flag may be changed when closing regions throws exception.<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    if (this.dataFsOk) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      shutdownWAL(!abortRequested.get());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    // Make sure the proxy is down.<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    if (this.rssStub != null) {<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      this.rssStub = null;<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    if (this.lockStub != null) {<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.lockStub = null;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>    if (this.rpcClient != null) {<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      this.rpcClient.close();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    }<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    if (this.leaseManager != null) {<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      this.leaseManager.close();<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    }<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (this.pauseMonitor != null) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.pauseMonitor.stop();<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    if (!killed) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      stopServiceThreads();<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    if (this.rpcServices != null) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      this.rpcServices.stop();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      deleteMyEphemeralNode();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      // pass<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    } catch (KeeperException e) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span><a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    if (this.zooKeeper != null) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      this.zooKeeper.close();<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.shutDown = true;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  private boolean containsMetaTableRegions() {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>  }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span><a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>  private boolean areAllUserRegionsOffline() {<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    boolean allUserRegionsOffline = true;<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        allUserRegionsOffline = false;<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        break;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      }<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    return allUserRegionsOffline;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span><a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>  /**<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   * @return Current write count for all online regions.<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>   */<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  private long getWriteRequestCount() {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    long writeCount = 0;<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    }<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    return writeCount;<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span><a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  @VisibleForTesting<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      throws IOException {<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>      return;<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      request.setLoad(sl);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      rss.regionServerReport(null, request.build());<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    } catch (ServiceException se) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // This will be caught and handled as a fatal error in run()<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        throw ioe;<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>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      // Method blocks until new master is found or we are stopped<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>      createRegionServerStatusStub(true);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    }<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  }<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span><a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   *<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * @param regionSizeStore The store containing region sizes<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>   */<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    if (rss == null) {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      // the current server could be stopping.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      return true;<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    try {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    } catch (ServiceException se) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>            + " This will be retried.", ioe);<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        return true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      if (rssStub == rss) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        rssStub = null;<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      createRegionServerStatusStub(true);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>            return false;<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return true;<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param rss The stub to send to the Master<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param regionSizeStore The store containing region sizes<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    RegionSpaceUseReportRequest request =<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    // Record the number of size reports sent<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    if (metricsRegionServer != null) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>  }<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span><a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  /**<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>   *<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * @param regionSizes The size in bytes of regions<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * @return The corresponding protocol buffer message.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   */<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    return request.build();<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span><a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  /**<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * protobuf message.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   *<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * @param regionInfo The RegionInfo<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>   * @return The protocol buffer<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   */<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    return RegionSpaceUse.newBuilder()<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        .build();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      throws IOException {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    // the wrapper to compute those numbers in one place.<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    // history.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    long usedMemory = -1L;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    long maxMemory = -1L;<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    if (usage != null) {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>      usedMemory = usage.getUsed();<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      maxMemory = usage.getMax();<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>    for (String coprocessor : coprocessors) {<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    for (HRegion region : regions) {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      if (region.getCoprocessorHost() != null) {<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>          .getCoprocessors()) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      }<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    if (this.infoServer != null) {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    } else {<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      serverLoad.setInfoServerPort(-1);<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>    }<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    MetricsUserAggregateSource userSource =<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    if (userSource != null) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      }<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    }<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    // either source or sink will get the same info<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    if (rsources != null) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      // always refresh first to get the latest value<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      if (rLoad != null) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS :<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            rLoad.getReplicationLoadSourceEntries()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>          serverLoad.addReplLoadSource(rLS);<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>    }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span><a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    return serverLoad.build();<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>  }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span><a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>    StringBuilder sb = new StringBuilder();<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>    }<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    return sb.toString();<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>  }<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span><a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>  /**<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>   * Wait on regions close.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   */<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    // Wait till all regions are closed before going out.<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    int lastCount = -1;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    long previousLogTime = 0;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>    boolean interrupted = false;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    try {<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      while (!onlineRegions.isEmpty()) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>        int count = getNumberOfOnlineRegions();<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        // Only print a message if the count of regions has changed.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>        if (count != lastCount) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>          // Log every second at most<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>            previousLogTime = System.currentTimeMillis();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>            lastCount = count;<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>            // Only print out regions still closing if a small number else will<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>            // swamp the log.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>            }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>          }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        // protect against the case where an open comes in after we start the<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        // iterator of onlineRegions to close all user regions.<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>            closedRegions.add(hri.getEncodedName());<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>            // Don't update zk with this close transition; pass false.<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>          }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        // No regions in RIT, we could stop waiting now.<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>          if (!onlineRegions.isEmpty()) {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>                " because some regions failed closing");<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>          }<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>          break;<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        } else {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>        }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        if (sleepInterrupted(200)) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>          interrupted = true;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        }<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      }<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    } finally {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      if (interrupted) {<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        Thread.currentThread().interrupt();<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>    boolean interrupted = false;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    try {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      Thread.sleep(millis);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>    } catch (InterruptedException e) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      LOG.warn("Interrupted while sleeping");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>      interrupted = true;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>    }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>    return interrupted;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  private void shutdownWAL(final boolean close) {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>    if (this.walFactory != null) {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>      try {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        if (close) {<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>          walFactory.close();<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        } else {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>          walFactory.shutdown();<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>        }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      } catch (Throwable e) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span><a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>   *<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>   * @return NamedQueueRecorder<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>   */<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    return this.namedQueueRecorder;<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>  /*<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>   *<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * @param c Extra configuration.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   */<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  throws IOException {<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    try {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      boolean updateRootDir = false;<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        String key = e.getName();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        // The hostname the master sees us as.<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>              this.startcode);<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>            LOG.error(msg);<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>            throw new IOException(msg);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            LOG.error(msg);<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>          }<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>          continue;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>        }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>        String value = e.getValue();<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            updateRootDir = true;<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>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        if (LOG.isDebugEnabled()) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        this.conf.set(key, value);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      createMyEphemeralNode();<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (updateRootDir) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        initializeFileSystem();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      }<a name="line.1568"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private MetricsRegionServer metricsRegionServer;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private ScheduledChore periodicFlusher;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  private volatile WALFactory walFactory;<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  private LogRoller walRoller;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  // A thread which calls reportProcedureDone<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  // flag set after we're done setting up server threads<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  // zookeeper connection and watcher<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  protected final ZKWatcher zooKeeper;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  // master address tracker<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  // Cluster Status Tracker<a name="line.426"></a>
+<span class="sourceLineNo">427</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  // Log Splitting Worker<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private SplitLogWorker splitLogWorker;<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>  // A sleeper that sleeps for msgInterval.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  protected final Sleeper sleeper;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  private final int shortOperationTimeout;<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  // Block cache<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  private BlockCache blockCache;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>  // The cache for mob files<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  private MobFileCache mobFileCache;<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  /** The health check chore. */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  private HealthCheckChore healthCheckChore;<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>  /** The Executor status collect chore. */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private ExecutorStatusChore executorStatusChore;<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>  /** The nonce manager chore. */<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private ScheduledChore nonceManagerChore;<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  /**<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * against Master.<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  protected String useThisHostnameInstead;<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>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Exception will be thrown if both are used.<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   */<a name="line.472"></a>
+<span class="sourceLineNo">473</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  protected String clusterId;<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>  // chore for refreshing store files for secondary regions<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private StorefileRefresherChore storefileRefresher;<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  private RegionServerCoprocessorHost rsHost;<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * HBASE-3787) are:<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  final ServerNonceManager nonceManager;<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>  private UserProvider userProvider;<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  protected final RSRpcServices rpcServices;<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>  private CoordinatedStateManager csm;<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  protected final ConfigurationManager configurationManager;<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  @VisibleForTesting<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  private volatile ThroughputController flushThroughputController;<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<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>   * Provide online slow log responses from ringbuffer<a name="line.541"></a>
+<span class="sourceLineNo">542</span>   */<a name="line.542"></a>
+<span class="sourceLineNo">543</span>  private NamedQueueRecorder namedQueueRecorder = 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>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.548"></a>
+<span class="sourceLineNo">549</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.550"></a>
+<span class="sourceLineNo">551</span>   */<a name="line.551"></a>
+<span class="sourceLineNo">552</span>  private final boolean masterless;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>  /**regionserver codec list **/<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // A timer to shutdown the process if abort takes too long<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * &lt;p/&gt;<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   * Don't start any services or managers in here in the Constructor.<a name="line.564"></a>
+<span class="sourceLineNo">565</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    super("RegionServer");  // thread name<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    TraceUtil.initTracer(conf);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      this.startcode = System.currentTimeMillis();<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.conf = conf;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.dataFsOk = true;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      HFile.checkHFileVersion(this.conf);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      checkCodecs(this.conf);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // Disable usage of meta replicas in the regionserver<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      // Config'ed params<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.595"></a>
+<span class="sourceLineNo">596</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      this.stopped = false;<a name="line.599"></a>
+<span class="sourceLineNo">600</span><a name="line.600"></a>
+<span class="sourceLineNo">601</span>      initNamedQueueRecorder(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      rpcServices = createRpcServices();<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      String hostName =<a name="line.604"></a>
+<span class="sourceLineNo">605</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              : this.useThisHostnameInstead;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>      // login the zookeeper client principal (if using security)<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      // login the server principal (if using secure Hadoop)<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      login(userProvider, hostName);<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      // init superusers and add the server principal (if using security)<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      // or process owner as default super user.<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      Superusers.initialize(conf);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>      boolean isMasterNotCarryTable =<a name="line.619"></a>
+<span class="sourceLineNo">620</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      if (!isMasterNotCarryTable) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        mobFileCache = new MobFileCache(conf);<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>      uncaughtExceptionHandler =<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span><a name="line.630"></a>
+<span class="sourceLineNo">631</span>      initializeFileSystem();<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>      this.configurationManager = new ConfigurationManager();<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      // Open connection to zookeeper and set primary watcher<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        canCreateBaseZNode());<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      if (!this.masterless) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        masterAddressTracker.start();<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        clusterStatusTracker.start();<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        masterAddressTracker = null;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>        clusterStatusTracker = null;<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.rpcServices.start(zooKeeper);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      // class HRS. TODO.<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.choreService = new ChoreService(getName(), true);<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      this.executorService = new ExecutorService(getName());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      putUpWebUI();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    } catch (Throwable t) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      // cause of failed startup is lost.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      LOG.error("Failed construction RegionServer", t);<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      throw t;<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><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    if (!(this instanceof HMaster)) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.676"></a>
+<span class="sourceLineNo">677</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      if (isOnlineLogProviderEnabled) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>      }<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    } else {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      final boolean isBalancerDecisionRecording = conf<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      if (isBalancerDecisionRecording) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>  // HMaster should override this method to load the specific config for master<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.697"></a>
+<span class="sourceLineNo">698</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.699"></a>
+<span class="sourceLineNo">700</span>        throw new IOException(msg);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      } else {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        return rpcServices.isa.getHostName();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      }<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    } else {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return hostname;<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">709</span>  /**<a name="line.709"></a>
+<span class="sourceLineNo">710</span>   * If running on Windows, do windows-specific setup.<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>        conf.reloadConfiguration();<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        cm.notifyAllObservers(conf);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      });<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
+<span class="sourceLineNo">720</span><a name="line.720"></a>
+<span class="sourceLineNo">721</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    NettyEventLoopGroupConfig nelgc =<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    return nelgc;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
+<span class="sourceLineNo">729</span><a name="line.729"></a>
+<span class="sourceLineNo">730</span>  private void initializeFileSystem() throws IOException {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    // (unless all is set to defaults).<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.748"></a>
+<span class="sourceLineNo">749</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>  /**<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   * Wait for an active Master.<a name="line.753"></a>
+<span class="sourceLineNo">754</span>   * See override in Master superclass for how it is used.<a name="line.754"></a>
+<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  protected void waitForMasterActive() {}<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  protected String getProcessName() {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    return REGIONSERVER;<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
+<span class="sourceLineNo">761</span><a name="line.761"></a>
+<span class="sourceLineNo">762</span>  protected boolean canCreateBaseZNode() {<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    return this.masterless;<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>  protected boolean canUpdateTableDescriptor() {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    return false;<a name="line.771"></a>
+<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
+<span class="sourceLineNo">773</span><a name="line.773"></a>
+<span class="sourceLineNo">774</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    return new RSRpcServices(this);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>  }<a name="line.776"></a>
+<span class="sourceLineNo">777</span><a name="line.777"></a>
+<span class="sourceLineNo">778</span>  protected void configureInfoServer() {<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    return RSDumpServlet.class;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>  @Override<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  public boolean registerService(Service instance) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    // No stacking of instances is allowed for a single executorService name<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.793"></a>
+<span class="sourceLineNo">794</span>        " already registered, rejecting request from " + instance);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      return false;<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span><a name="line.797"></a>
+<span class="sourceLineNo">798</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    if (LOG.isDebugEnabled()) {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      LOG.debug(<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    }<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    return true;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>  }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span>  private Configuration cleanupConfiguration() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    Configuration conf = this.conf;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    //   masters' availability.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    //   other internal connections too.<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      // the conf and unset the client ZK related properties<a name="line.819"></a>
+<span class="sourceLineNo">820</span>      conf = new Configuration(this.conf);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    }<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    return conf;<a name="line.823"></a>
+<span class="sourceLineNo">824</span>  }<a name="line.824"></a>
+<span class="sourceLineNo">825</span><a name="line.825"></a>
+<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
+<span class="sourceLineNo">829</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    // check to see if the codec list is available:<a name="line.830"></a>
+<span class="sourceLineNo">831</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    if (codecs == null) return;<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    for (String codec : codecs) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>        throw new IOException("Compression codec " + codec +<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          " not supported, aborting RS construction");<a name="line.836"></a>
+<span class="sourceLineNo">837</span>      }<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    }<a name="line.838"></a>
+<span class="sourceLineNo">839</span>  }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span>  public String getClusterId() {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    return this.clusterId;<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span>  /**<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * Setup our cluster connection if not already initialized.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   */<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    if (asyncClusterConnection == null) {<a name="line.849"></a>
+<span class="sourceLineNo">850</span>      Configuration conf = cleanupConfiguration();<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      User user = userProvider.getCurrent();<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      asyncClusterConnection =<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>    }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   */<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  private void preRegistrationInitialization() {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    try {<a name="line.864"></a>
+<span class="sourceLineNo">865</span>      initializeZooKeeper();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      setupClusterConnection();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>      // Setup RPC client for master communication<a name="line.867"></a>
+<span class="sourceLineNo">868</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    } catch (Throwable t) {<a name="line.869"></a>
+<span class="sourceLineNo">870</span>      // Call stop if error or process will stick around for ever since server<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      // puts up non-daemon threads.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      this.rpcServices.stop();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
+<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * &lt;p&gt;<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * Finally open long-living server short-circuit connection.<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   */<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    justification="cluster Id znode read would give us correct response")<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    // Nothing to do in here if no Master in the mix.<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    if (this.masterless) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      return;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    // block until a master is available.  No point in starting up if no master<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    // running.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    // when ready.<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.900"></a>
+<span class="sourceLineNo">901</span>    if (clusterId == null) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>      // Retrieve clusterId<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      // Since cluster status is now up<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      // ID should have already been set by HMaster<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      try {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        if (clusterId == null) {<a name="line.907"></a>
+<span class="sourceLineNo">908</span>          this.abort("Cluster ID has not been set");<a name="line.908"></a>
+<span class="sourceLineNo">909</span>        }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>        LOG.info("ClusterId : " + clusterId);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      } catch (KeeperException e) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      }<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>    waitForMasterActive();<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    if (isStopped() || isAborted()) {<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      return; // No need for further initialization<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>    // watch for snapshots and other procedures<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    try {<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      rspmHost.loadProcedures(conf);<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      rspmHost.initialize(this);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    } catch (KeeperException e) {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
+<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
+<span class="sourceLineNo">930</span><a name="line.930"></a>
+<span class="sourceLineNo">931</span>  /**<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * if the region server is shut down<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * @param tracker znode tracker to use<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      throws IOException, InterruptedException {<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      if (this.stopped) {<a name="line.941"></a>
+<span class="sourceLineNo">942</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    }<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  }<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>  /**<a name="line.947"></a>
+<span class="sourceLineNo">948</span>   * @return True if the cluster is up.<a name="line.948"></a>
+<span class="sourceLineNo">949</span>   */<a name="line.949"></a>
+<span class="sourceLineNo">950</span>  @Override<a name="line.950"></a>
+<span class="sourceLineNo">951</span>  public boolean isClusterUp() {<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    return this.masterless ||<a name="line.952"></a>
+<span class="sourceLineNo">953</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.953"></a>
+<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
+<span class="sourceLineNo">955</span><a name="line.955"></a>
+<span class="sourceLineNo">956</span>  /**<a name="line.956"></a>
+<span class="sourceLineNo">957</span>   * The HRegionServer sticks in this loop until closed.<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   */<a name="line.958"></a>
+<span class="sourceLineNo">959</span>  @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public void run() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    if (isStopped()) {<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      LOG.info("Skipping run; stopped");<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      return;<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    }<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    try {<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      preRegistrationInitialization();<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    } catch (Throwable e) {<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      abort("Fatal exception during initialization", e);<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    }<a name="line.970"></a>
+<span class="sourceLineNo">971</span><a name="line.971"></a>
+<span class="sourceLineNo">972</span>    try {<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.974"></a>
+<span class="sourceLineNo">975</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.975"></a>
+<span class="sourceLineNo">976</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.979"></a>
+<span class="sourceLineNo">980</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.981"></a>
+<span class="sourceLineNo">982</span>        // come up.<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        LOG.debug("About to register with Master.");<a name="line.983"></a>
+<span class="sourceLineNo">984</span>        RetryCounterFactory rcf =<a name="line.984"></a>
+<span class="sourceLineNo">985</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        RetryCounter rc = rcf.create();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        while (keepLooping()) {<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          if (w == null) {<a name="line.989"></a>
+<span class="sourceLineNo">990</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.990"></a>
+<span class="sourceLineNo">991</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.991"></a>
+<span class="sourceLineNo">992</span>            this.sleeper.sleep(sleepTime);<a name="line.992"></a>
+<span class="sourceLineNo">993</span>          } else {<a name="line.993"></a>
+<span class="sourceLineNo">994</span>            handleReportForDutyResponse(w);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>            break;<a name="line.995"></a>
+<span class="sourceLineNo">996</span>          }<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        }<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      }<a name="line.998"></a>
+<span class="sourceLineNo">999</span><a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>        // start the snapshot handler and other procedure handlers,<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>        // since the server is ready to run<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>        if (this.rspmHost != null) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>          this.rspmHost.start();<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        }<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        // Start the Quota Manager<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>        if (this.rsQuotaManager != null) {<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>        }<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>          this.rsSpaceQuotaManager.start();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>        }<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span><a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // We registered with the Master.  Go into run mode.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      long lastMsg = System.currentTimeMillis();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      long oldRequestCount = -1;<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      // The main run loop.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        if (!isClusterUp()) {<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>          if (onlineRegions.isEmpty()) {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          } else if (!this.stopping) {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>            this.stopping = true;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>            LOG.info("Closing user regions");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>            closeUserRegions(this.abortRequested.get());<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>          } else {<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>            if (allUserRegionsOffline) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>              // Set stopped if no more write requests tp meta tables<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>              // since last time we went around the loop.  Any open<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>              // meta regions will be closed on our way out.<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>                break;<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>              }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>              oldRequestCount = getWriteRequestCount();<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>            } else {<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>              // Make sure all regions have been closed -- some regions may<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>              // have not got it because we were splitting at the time of<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>              // the call to closeUserRegions.<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>              closeUserRegions(this.abortRequested.get());<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>            }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>          }<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>        }<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>        long now = System.currentTimeMillis();<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>          tryRegionServerReport(lastMsg, now);<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          lastMsg = System.currentTimeMillis();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>        }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>          this.sleeper.sleep();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>        }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      } // for<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    } catch (Throwable t) {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        abort(prefix + t.getMessage(), t);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span><a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    if (this.leaseManager != null) {<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    if (this.splitLogWorker != null) {<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      splitLogWorker.stop();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (this.infoServer != null) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      LOG.info("Stopping infoServer");<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      try {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>        this.infoServer.stop();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      } catch (Exception e) {<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // Send cache a shutdown.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (blockCache != null) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      blockCache.shutdown();<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    if (mobFileCache != null) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      mobFileCache.shutdown();<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span><a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    if (rspmHost != null) {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    if (this.killed) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } else if (abortRequested.get()) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      if (this.dataFsOk) {<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      }<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      LOG.info("aborting server " + this.serverName);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    } else {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      closeUserRegions(abortRequested.get());<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      LOG.info("stopping server " + this.serverName);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span><a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    if (this.asyncClusterConnection != null) {<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      try {<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        this.asyncClusterConnection.close();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      } catch (IOException e) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        if (this.compactSplitThread != null) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>          this.compactSplitThread.join();<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>          this.compactSplitThread = null;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>        }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>      }<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    // Stop the quota manager<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    if (rsQuotaManager != null) {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      rsQuotaManager.stop();<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    if (rsSpaceQuotaManager != null) {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager.stop();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      rsSpaceQuotaManager = null;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    }<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span><a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    // flag may be changed when closing regions throws exception.<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (this.dataFsOk) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      shutdownWAL(!abortRequested.get());<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span><a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    // Make sure the proxy is down.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    if (this.rssStub != null) {<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      this.rssStub = null;<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    if (this.lockStub != null) {<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      this.lockStub = null;<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    }<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (this.rpcClient != null) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      this.rpcClient.close();<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    if (this.leaseManager != null) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      this.leaseManager.close();<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    if (this.pauseMonitor != null) {<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      this.pauseMonitor.stop();<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    if (!killed) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      stopServiceThreads();<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span><a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    if (this.rpcServices != null) {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>      this.rpcServices.stop();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    }<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span><a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    try {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      deleteMyEphemeralNode();<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      // pass<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    } catch (KeeperException e) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span><a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    if (this.zooKeeper != null) {<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>      this.zooKeeper.close();<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>    this.shutDown = true;<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  private boolean containsMetaTableRegions() {<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  private boolean areAllUserRegionsOffline() {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    boolean allUserRegionsOffline = true;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>        allUserRegionsOffline = false;<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        break;<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      }<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    return allUserRegionsOffline;<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  /**<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   * @return Current write count for all online regions.<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private long getWriteRequestCount() {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    long writeCount = 0;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    return writeCount;<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>  }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span><a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  @VisibleForTesting<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      throws IOException {<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>      return;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      request.setLoad(sl);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      rss.regionServerReport(null, request.build());<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    } catch (ServiceException se) {<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>        // This will be caught and handled as a fatal error in run()<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        throw ioe;<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      if (rssStub == rss) {<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>        rssStub = null;<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      }<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      // Method blocks until new master is found or we are stopped<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      createRegionServerStatusStub(true);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  }<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span><a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>  /**<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>   *<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   * @param regionSizeStore The store containing region sizes<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>   */<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    if (rss == null) {<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      // the current server could be stopping.<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      return true;<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    }<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    try {<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>    } catch (ServiceException se) {<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>            + " This will be retried.", ioe);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>        return true;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>      if (rssStub == rss) {<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        rssStub = null;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>      }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>      createRegionServerStatusStub(true);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>            return false;<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>          }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>        }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>      }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>    }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    return true;<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>  /**<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   *<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @param rss The stub to send to the Master<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   * @param regionSizeStore The store containing region sizes<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>    RegionSpaceUseReportRequest request =<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    // Record the number of size reports sent<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>    if (metricsRegionServer != null) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  /**<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>   *<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>   * @param regionSizes The size in bytes of regions<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>   * @return The corresponding protocol buffer message.<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>   */<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    return request.build();<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>  }<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  /**<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>   * protobuf message.<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>   *<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>   * @param regionInfo The RegionInfo<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>   * @return The protocol buffer<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>   */<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    return RegionSpaceUse.newBuilder()<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>        .build();<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  }<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span><a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>      throws IOException {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    // the wrapper to compute those numbers in one place.<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    // history.<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    long usedMemory = -1L;<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    long maxMemory = -1L;<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>    if (usage != null) {<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>      usedMemory = usage.getUsed();<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>    for (String coprocessor : coprocessors) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>    }<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    for (HRegion region : regions) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      if (region.getCoprocessorHost() != null) {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          .getCoprocessors()) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    if (this.infoServer != null) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>    } else {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      serverLoad.setInfoServerPort(-1);<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    MetricsUserAggregateSource userSource =<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    if (userSource != null) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    if (sameReplicationSourceAndSink &amp;&amp; replicationSourceHandler != null) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      // always refresh first to get the latest value<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>      ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      if (rLoad != null) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>          .getReplicationLoadSourceEntries()) {<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    } else {<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      if (replicationSourceHandler != null) {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        if (rLoad != null) {<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>          for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>            .getReplicationLoadSourceEntries()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>            serverLoad.addReplLoadSource(rLS);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          }<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        }<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      if (replicationSinkHandler != null) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        ReplicationLoad rLoad = replicationSinkHandler.refreshAndGetReplicationLoad();<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>        if (rLoad != null) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>          serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    return serverLoad.build();<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span><a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    StringBuilder sb = new StringBuilder();<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    return sb.toString();<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>  }<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span><a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>  /**<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>   * Wait on regions close.<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   */<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    // Wait till all regions are closed before going out.<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    int lastCount = -1;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    long previousLogTime = 0;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>    boolean interrupted = false;<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>    try {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      while (!onlineRegions.isEmpty()) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        int count = getNumberOfOnlineRegions();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        // Only print a message if the count of regions has changed.<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>        if (count != lastCount) {<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>          // Log every second at most<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>            previousLogTime = System.currentTimeMillis();<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>            lastCount = count;<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>            // Only print out regions still closing if a small number else will<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>            // swamp the log.<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>            }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>          }<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        // protect against the case where an open comes in after we start the<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        // iterator of onlineRegions to close all user regions.<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>            closedRegions.add(hri.getEncodedName());<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>            // Don't update zk with this close transition; pass false.<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>          }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        // No regions in RIT, we could stop waiting now.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>          if (!onlineRegions.isEmpty()) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>                " because some regions failed closing");<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          }<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          break;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        }<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        if (sleepInterrupted(200)) {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>          interrupted = true;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        }<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    } finally {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      if (interrupted) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        Thread.currentThread().interrupt();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      }<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>    }<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    boolean interrupted = false;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    try {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>      Thread.sleep(millis);<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    } catch (InterruptedException e) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>      LOG.warn("Interrupted while sleeping");<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      interrupted = true;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    return interrupted;<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>  }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>  private void shutdownWAL(final boolean close) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    if (this.walFactory != null) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      try {<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        if (close) {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>          walFactory.close();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        } else {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          walFactory.shutdown();<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (Throwable e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      }<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span><a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>  /**<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   *<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   * @return NamedQueueRecorder<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>   */<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>    return this.namedQueueRecorder;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>  /*<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>   *<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>   * @param c Extra configuration.<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>   */<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  throws IOException {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    try {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      boolean updateRootDir = false;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>        String key = e.getName();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>        // The hostname the master sees us as.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              this.startcode);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>            LOG.error(msg);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>            throw new IOException(msg);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>          }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            LOG.error(msg);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>          }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          continue;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>        }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span><a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        String value = e.getValue();<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>            updateRootDir = true;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>          }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        }<a name="line.1568"></a>
 <span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1573"></a>
+<span class="sourceLineNo">1570</span>        if (LOG.isDebugEnabled()) {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        this.conf.set(key, value);<a name="line.1573"></a>
 <span class="sourceLineNo">1574</span>      }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      // Save it in a file, this will allow to see if we crash<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      setupWALAndReplication();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      final MetricsTable metricsTable =<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      pauseMonitor.start();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>        startServices();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      // or make sense of it.<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      startReplicationService();<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span><a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      // Set up ZK<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>          ", sessionid=0x" +<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span><a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      // Wake up anyone waiting for this server to online<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>      synchronized (online) {<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        online.set(true);<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        online.notifyAll();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    } catch (Throwable e) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      stop("Failed initialization");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>          "Region server startup failed");<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    } finally {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      sleeper.skipSleepCycle();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      // it.<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      // init the chunkCreator<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  }<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span><a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  private void startHeapMemoryManager() {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    if (this.blockCache != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      this.hMemManager =<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      this.hMemManager.start(getChoreService());<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>    }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>  }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span><a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  @Override<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>    return regionServerAccounting;<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   * @param r Region to get RegionLoad for.<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>   * @return RegionLoad instance.<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>   */<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>    int stores = 0;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    int storefiles = 0;<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>    int storeRefCount = 0;<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    int storeUncompressedSizeMB = 0;<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    int storefileSizeMB = 0;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    long storefileIndexSizeKB = 0;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>    int rootLevelIndexSizeKB = 0;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    int totalStaticIndexSizeKB = 0;<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    int totalStaticBloomSizeKB = 0;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    long totalCompactingKVs = 0;<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    long currentCompactedKVs = 0;<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>    stores += storeList.size();<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>    for (HStore store : storeList) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      storefiles += store.getStorefilesCount();<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      storeRefCount += currentStoreRefCount;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>      if (progress != null) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>      }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>    }<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span><a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    if (regionLoadBldr == null) {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    if (regionSpecifier == null) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1721"></a>
+<span class="sourceLineNo">1575</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      createMyEphemeralNode();<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span><a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      if (updateRootDir) {<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        initializeFileSystem();<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span><a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      }<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span><a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      // Save it in a file, this will allow to see if we crash<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      setupWALAndReplication();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      final MetricsTable metricsTable =<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      pauseMonitor.start();<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        startServices();<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      // or make sense of it.<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      startReplicationService();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span><a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      // Set up ZK<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          ", sessionid=0x" +<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span><a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>      // Wake up anyone waiting for this server to online<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      synchronized (online) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        online.set(true);<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        online.notifyAll();<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>    } catch (Throwable e) {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      stop("Failed initialization");<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>          "Region server startup failed");<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    } finally {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      sleeper.skipSleepCycle();<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>  }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span><a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>      // it.<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      // init the chunkCreator<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>  }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span><a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>  private void startHeapMemoryManager() {<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    if (this.blockCache != null) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      this.hMemManager =<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      this.hMemManager.start(getChoreService());<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>  }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span><a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>  }<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span><a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>  }<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span><a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  @Override<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    return regionServerAccounting;<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  }<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span><a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /**<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @param r Region to get RegionLoad for.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>   * @return RegionLoad instance.<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>   */<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    int stores = 0;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    int storefiles = 0;<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    int storeRefCount = 0;<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>    int storeUncompressedSizeMB = 0;<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    int storefileSizeMB = 0;<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    long storefileIndexSizeKB = 0;<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>    int rootLevelIndexSizeKB = 0;<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    int totalStaticIndexSizeKB = 0;<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    int totalStaticBloomSizeKB = 0;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    long totalCompactingKVs = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    long currentCompactedKVs = 0;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    stores += storeList.size();<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    for (HStore store : storeList) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      storefiles += store.getStorefilesCount();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>      storeRefCount += currentStoreRefCount;<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (progress != null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>    }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      .setStores(stores)<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>      .setStorefiles(storefiles)<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>      .setStoreRefCount(storeRefCount)<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      .setDataLocality(dataLocality)<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    return regionLoadBldr.build();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>  }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span><a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    userLoadBldr.setUserName(user);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>            .setHostName(clientMetrics.getHostName())<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return userLoadBldr.build();<a name="line.1764"></a>
+<span class="sourceLineNo">1723</span><a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    if (regionLoadBldr == null) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    if (regionSpecifier == null) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>      .setStores(stores)<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      .setStorefiles(storefiles)<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>      .setStoreRefCount(storeRefCount)<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      .setDataLocality(dataLocality)<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span><a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    return regionLoadBldr.build();<a name="line.1764"></a>
 <span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
 <span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  }<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span><a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  /**<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>   */<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private final HRegionServer instance;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    private final int majorCompactPriority;<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    // immediately upon region server startup<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    private long iteration = 1;<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      this.instance = h;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      /* MajorCompactPriority is configurable.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>       * If not set, the compaction will use default priority.<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>       */<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              DEFAULT_PRIORITY);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
+<span class="sourceLineNo">1767</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>    userLoadBldr.setUserName(user);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>            .setHostName(clientMetrics.getHostName())<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    return userLoadBldr.build();<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>  }<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span><a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>  /**<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>   */<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    private final HRegionServer instance;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    private final int majorCompactPriority;<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    // immediately upon region server startup<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    private long iteration = 1;<a name="line.1794"></a>
 <span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    protected void chore() {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        // Skip compaction if region is read only<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>        if (r == null || r.isReadOnly()) {<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          continue;<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>        }<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        HRegion hr = (HRegion) r;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        for (HStore s : hr.stores.values()) {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          try {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            assert multiplier &gt; 0;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>            if (iteration % multiplier != 0) {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>              continue;<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            if (s.needsCompaction()) {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>                getName() + " requests compaction");<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>              s.triggerMajorCompaction();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>                    getName() + " requests major compaction; use default priority",<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                    Store.NO_PRIORITY,<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>              } else {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>              }<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>            }<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>          } catch (IOException e) {<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>          }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        }<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>  }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span><a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    private final HRegionServer server;<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    private final long rangeOfDelayMs;<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span><a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      this.server = server;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span><a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span><a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    @Override<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    protected void chore() {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        if (r == null) continue;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>          if (requester != null) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>                  randomDelay);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>            }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>          }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      }<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>  }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  /**<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * method is designed mostly to be useful in tests.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   *<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>   * @return true if online, false if not.<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   */<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>  public boolean isOnline() {<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    return online.get();<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  }<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span><a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  /**<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * be hooked up to WAL.<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   */<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>  private void setupWALAndReplication() throws IOException {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>    WALFactory factory =<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span><a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      LOG.debug("logDir={}", logDir);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      if (this.walFs.exists(logDir)) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        throw new RegionServerRunningException(<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      // region servers.<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        factory.getWALProvider());<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    }<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>    this.walFactory = factory;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  /**<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>   * Start up replication source and sink handlers.<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>   */<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  private void startReplicationService() throws IOException {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        this.replicationSourceHandler != null) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } else {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      if (this.replicationSourceHandler != null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      if (this.replicationSinkHandler != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span><a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  /**<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>   * @return Master address tracker instance.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   */<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    return this.masterAddressTracker;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>  }<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span><a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>  /**<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>   * registered with the Master.<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>   * hosting server. Worker logs the exception and exits.<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>   */<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>  private void startServices() throws IOException {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      initializeThreads();<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    this.secureBulkLoadManager.start();<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span><a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    // Health checker thread.<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    if (isHealthCheckerConfigured()) {<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    // Executor status collect thread.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span><a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    this.walRoller = new LogRoller(this);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span><a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    int cleanerInterval =<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    this.compactedFileDischarger =<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span><a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    // Start executor services<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    // Start the threads for compacted files discharger<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    }<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span><a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        uncaughtExceptionHandler);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>    if (this.cacheFlusher != null) {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2029"></a>
+<span class="sourceLineNo">1796</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      this.instance = h;<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span><a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      /* MajorCompactPriority is configurable.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>       * If not set, the compaction will use default priority.<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>       */<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>              DEFAULT_PRIORITY);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    @Override<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    protected void chore() {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        // Skip compaction if region is read only<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        if (r == null || r.isReadOnly()) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>          continue;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        HRegion hr = (HRegion) r;<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>        for (HStore s : hr.stores.values()) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          try {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>            assert multiplier &gt; 0;<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>            if (iteration % multiplier != 0) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>              continue;<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>            }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>            if (s.needsCompaction()) {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>                getName() + " requests compaction");<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>              s.triggerMajorCompaction();<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>                    getName() + " requests major compaction; use default priority",<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>                    Store.NO_PRIORITY,<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>              } else {<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>              }<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            }<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>          } catch (IOException e) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    private final HRegionServer server;<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    private final long rangeOfDelayMs;<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      this.server = server;<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span><a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    @Override<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    protected void chore() {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        if (r == null) continue;<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          if (requester != null) {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>                  randomDelay);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>            }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>          }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>        }<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      }<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    }<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  }<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>  /**<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * method is designed mostly to be useful in tests.<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   * @return true if online, false if not.<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   */<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public boolean isOnline() {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    return online.get();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>  }<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span><a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>  /**<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * be hooked up to WAL.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   */<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>  private void setupWALAndReplication() throws IOException {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    WALFactory factory =<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span><a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      LOG.debug("logDir={}", logDir);<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (this.walFs.exists(logDir)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new RegionServerRunningException(<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      // region servers.<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        factory.getWALProvider());<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>    }<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    this.walFactory = factory;<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>  }<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span><a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>  /**<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>   * Start up replication source and sink handlers.<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>   */<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  private void startReplicationService() throws IOException {<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    } else {<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      if (this.replicationSourceHandler != null) {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      if (this.replicationSinkHandler != null) {<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    }<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  }<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span><a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  /**<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>   * @return Master address tracker instance.<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>   */<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    return this.masterAddressTracker;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>  }<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span><a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>  /**<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>   * registered with the Master.<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>   * hosting server. Worker logs the exception and exits.<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>   */<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>  private void startServices() throws IOException {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>      initializeThreads();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>    }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>    this.secureBulkLoadManager.start();<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    // Health checker thread.<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>    if (isHealthCheckerConfigured()) {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    // Executor status collect thread.<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span><a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    this.walRoller = new LogRoller(this);<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    int cleanerInterval =<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    this.compactedFileDischarger =<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span><a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // Start executor services<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>    // Start the threads for compacted files discharger<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    if (this.compactionChecker != null) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      choreService.scheduleChore(compactionChecker);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>    }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    if (this.periodicFlusher != null) {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    if (this.healthCheckChore != null) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2041"></a>
+<span class="sourceLineNo">2031</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>        uncaughtExceptionHandler);<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    if (this.cacheFlusher != null) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2041"></a>
 <span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    if (this.executorStatusChore != null) {<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    if (this.nonceManagerChore != null) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2047"></a>
+<span class="sourceLineNo">2043</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    if (this.compactionChecker != null) {<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>      choreService.scheduleChore(compactionChecker);<a name="line.2047"></a>
 <span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    if (this.storefileRefresher != null) {<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2050"></a>
+<span class="sourceLineNo">2049</span>    if (this.periodicFlusher != null) {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2050"></a>
 <span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    if (this.fsUtilizationChore != null) {<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2053"></a>
+<span class="sourceLineNo">2052</span>    if (this.healthCheckChore != null) {<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2053"></a>
 <span class="sourceLineNo">2054</span>    }<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2056"></a>
+<span class="sourceLineNo">2055</span>    if (this.executorStatusChore != null) {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2056"></a>
 <span class="sourceLineNo">2057</span>    }<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span><a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    // an unhandled exception, it will just exit.<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        uncaughtExceptionHandler);<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    // Create the log splitting worker and start it<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      splitLogWorker.start();<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>      LOG.debug("SplitLogWorker started");<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>    }<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span><a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>    // Memstore services.<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    startHeapMemoryManager();<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    // Call it after starting HeapMemoryManager.<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    initializeMemStoreChunkCreator();<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  }<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>  private void initializeThreads() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    // Cache flushing thread.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span><a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    // Compaction thread<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span><a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>    if (isSlowLogTableEnabled) {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>      // default chore duration: 10 min<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span><a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    if (this.nonceManager != null) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span><a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // Setup the Quota Manager<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    }<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span><a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    boolean onlyMetaRefresh = false;<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (storefileRefreshPeriod == 0) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      onlyMetaRefresh = true;<a name="line.2131"></a>
+<span class="sourceLineNo">2058</span>    if (this.nonceManagerChore != null) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>    }<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>    if (this.storefileRefresher != null) {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>    }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>    if (this.fsUtilizationChore != null) {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    }<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    // an unhandled exception, it will just exit.<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        uncaughtExceptionHandler);<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>    // Create the log splitting worker and start it<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>      splitLogWorker.start();<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      LOG.debug("SplitLogWorker started");<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span><a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    // Memstore services.<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>    startHeapMemoryManager();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>    // Call it after starting HeapMemoryManager.<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    initializeMemStoreChunkCreator();<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span><a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>  private void initializeThreads() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    // Cache flushing thread.<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span><a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>    // Compaction thread<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span><a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span><a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    if (isSlowLogTableEnabled) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>      // default chore duration: 10 min<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    if (this.nonceManager != null) {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>    }<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span><a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>    // Setup the Quota Manager<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span><a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>          onlyMetaRefresh, this, this);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    }<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    registerConfigurationObservers();<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span><a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>  private void registerConfigurationObservers() {<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    configurationManager.registerObserver(this);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>  }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  /**<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>   * Puts up the webui.<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>   */<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>  private void putUpWebUI() throws IOException {<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>    if(this instanceof HMaster) {<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    // -1 is for disabling info server<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    if (port &lt; 0) {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      return;<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>      String msg =<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          "Failed to start http info server. Address " + addr<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>      LOG.error(msg);<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      throw new IOException(msg);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    // check if auto port bind enabled<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    while (true) {<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>      try {<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>        configureInfoServer();<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        this.infoServer.start();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        break;<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      } catch (BindException e) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        if (!auto) {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          // auto bind disabled throw BindException<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          throw e;<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>        // auto bind enabled, try to use another port<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>        port++;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    port = this.infoServer.getPort();<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>  }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span><a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  /*<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>   * Verify that server is healthy<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   */<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  private boolean isHealthy() {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    if (!dataFsOk) {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      // File system problem<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return false;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>    // Verify that all threads are alive<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    if (!healthy) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    return healthy;<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  }<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span><a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  @Override<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    return walFactory.getWALs();<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>  }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span><a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  @Override<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    if (this.walRoller != null) {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>      this.walRoller.addWAL(wal);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return wal;<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>  }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span><a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>  public LogRoller getWalRoller() {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    return walRoller;<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span><a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  WALFactory getWalFactory() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return walFactory;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  @Override<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  public Connection getConnection() {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    return getAsyncConnection().toConnection();<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  @Override<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>  public void stop(final String msg) {<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>  }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span><a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>  /**<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>   * Stops the regionserver.<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * @param msg Status message<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * @param force True if this is a regionserver abort<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   */<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    if (!this.stopped) {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      if (this.rsHost != null) {<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        // when forced via abort don't allow CPs to override<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>        try {<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>          this.rsHost.preStop(msg, user);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>        } catch (IOException ioe) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>          if (!force) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>            return;<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>          }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      this.stopped = true;<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      LOG.info("STOPPED: " + msg);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      // Wakes run() if it is sleeping<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      sleeper.skipSleepCycle();<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public void waitForServerOnline(){<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      synchronized (online) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        try {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>          online.wait(msgInterval);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>        } catch (InterruptedException ie) {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>          Thread.currentThread().interrupt();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>          break;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>        }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      }<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span><a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>  @Override<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    HRegion r = context.getRegion();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>    long openProcId = context.getOpenProcId();<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    rpcServices.checkOpen();<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>    // Skip compaction check if region is read only<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>    if (!r.isReadOnly()) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      for (HStore s : r.stores.values()) {<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>        }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      }<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      LOG.error(<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      openSeqNum = 0;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>    }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // Notify master<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      throw new IOException(<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    }<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span><a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    triggerFlushInPrimaryRegion(r);<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span><a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span><a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    boolean onlyMetaRefresh = false;<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    if (storefileRefreshPeriod == 0) {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      onlyMetaRefresh = true;<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    }<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>          onlyMetaRefresh, this, this);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    registerConfigurationObservers();<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>  }<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span><a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>  private void registerConfigurationObservers() {<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>    configurationManager.registerObserver(this);<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  }<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span><a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>  /**<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>   * Puts up the webui.<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>   */<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  private void putUpWebUI() throws IOException {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span><a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    if(this instanceof HMaster) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>    }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>    // -1 is for disabling info server<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    if (port &lt; 0) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      return;<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span><a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      String msg =<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          "Failed to start http info server. Address " + addr<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>      LOG.error(msg);<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>      throw new IOException(msg);<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>    }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    // check if auto port bind enabled<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    while (true) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      try {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>        configureInfoServer();<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>        this.infoServer.start();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>        break;<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      } catch (BindException e) {<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>        if (!auto) {<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>          // auto bind disabled throw BindException<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>          throw e;<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>        }<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>        // auto bind enabled, try to use another port<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        port++;<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    }<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>    port = this.infoServer.getPort();<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span><a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  /*<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   * Verify that server is healthy<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>   */<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>  private boolean isHealthy() {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    if (!dataFsOk) {<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      // File system problem<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      return false;<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    // Verify that all threads are alive<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>    if (!healthy) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>    return healthy;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  }<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span><a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>  @Override<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>    return walFactory.getWALs();<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span><a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>  @Override<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>    if (this.walRoller != null) {<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      this.walRoller.addWAL(wal);<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    }<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    return wal;<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>  }<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span><a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>  public LogRoller getWalRoller() {<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>    return walRoller;<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>  }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span><a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>  WALFactory getWalFactory() {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>    return walFactory;<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>  }<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span><a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>  @Override<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>  public Connection getConnection() {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    return getAsyncConnection().toConnection();<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  @Override<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>  public void stop(final String msg) {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Stops the regionserver.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param msg Status message<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @param force True if this is a regionserver abort<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   */<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    if (!this.stopped) {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      if (this.rsHost != null) {<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>        // when forced via abort don't allow CPs to override<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>        try {<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>          this.rsHost.preStop(msg, user);<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>        } catch (IOException ioe) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>          if (!force) {<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>            return;<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>          }<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>        }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>      }<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      this.stopped = true;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      LOG.info("STOPPED: " + msg);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      // Wakes run() if it is sleeping<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      sleeper.skipSleepCycle();<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>    }<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>  }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span><a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  public void waitForServerOnline(){<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      synchronized (online) {<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        try {<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>          online.wait(msgInterval);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>        } catch (InterruptedException ie) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>          Thread.currentThread().interrupt();<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          break;<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>        }<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    }<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span><a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  @Override<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    HRegion r = context.getRegion();<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>    long openProcId = context.getOpenProcId();<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>    rpcServices.checkOpen();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>    // Skip compaction check if region is read only<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    if (!r.isReadOnly()) {<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      for (HStore s : r.stores.values()) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>        }<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      }<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>      LOG.error(<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      openSeqNum = 0;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>    }<a name="line.2329"></a>
 <span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>  /**<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>   * around to receive it.<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>   */<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>    final TransitionCode code = context.getCode();<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>    final RegionInfo[] hris = context.getHris();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span><a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>    if (code == TransitionCode.OPENED) {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>      if (hris[0].isMetaRegion()) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        try {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>        } catch (KeeperException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>          LOG.info("Failed to update meta location", e);<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          return false;<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      } else {<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>        try {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        } catch (IOException e) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>          LOG.info("Failed to update meta", e);<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>          return false;<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        }<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    return true;<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>      final RegionStateTransitionContext context) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    final TransitionCode code = context.getCode();<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    final RegionInfo[] hris = context.getHris();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    final long[] procIds = context.getProcIds();<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span><a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    transition.setTransitionCode(code);<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>    }<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    for (RegionInfo hri: hris) {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    for (long procId: procIds) {<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>      transition.addProcId(procId);<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span><a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    return builder.build();<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>  }<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span><a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  @Override<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>      return skipReportingTransition(context);<a name="line.2392"></a>
+<span class="sourceLineNo">2331</span>    // Notify master<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>      throw new IOException(<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    }<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    triggerFlushInPrimaryRegion(r);<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span><a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>  }<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span><a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>  /**<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>   * around to receive it.<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>   */<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>    final TransitionCode code = context.getCode();<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    final RegionInfo[] hris = context.getHris();<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span><a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>    if (code == TransitionCode.OPENED) {<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>      if (hris[0].isMetaRegion()) {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>        try {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        } catch (KeeperException e) {<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>          LOG.info("Failed to update meta location", e);<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>          return false;<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>        }<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      } else {<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>        try {<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>        } catch (IOException e) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>          LOG.info("Failed to update meta", e);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>          return false;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>        }<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>      }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    }<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>    return true;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>  }<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span><a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>      final RegionStateTransitionContext context) {<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    final TransitionCode code = context.getCode();<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    final RegionInfo[] hris = context.getHris();<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    final long[] procIds = context.getProcIds();<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span><a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    transition.setTransitionCode(code);<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    }<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    for (RegionInfo hri: hris) {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>    }<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    final ReportRegionStateTransitionRequest request =<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>        createReportRegionStateTransitionRequest(context);<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    final long initPauseTime = 1000;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    int tries = 0;<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    long pauseTime;<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>    // HRegionServer does down.<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      try {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        if (rss == null) {<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>          createRegionServerStatusStub();<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>          continue;<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        }<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>        ReportRegionStateTransitionResponse response =<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>          rss.reportRegionStateTransition(null, request);<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>        if (response.hasErrorMessage()) {<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          break;<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        }<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>        }<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>        // NOTE: Return mid-method!!!<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>        return true;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>      } catch (ServiceException se) {<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        boolean pause =<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        if (pause) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          // Do backoff else we flood the Master with requests.<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>        } else {<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>          pauseTime = initPauseTime; // Reset.<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>        }<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        LOG.info("Failed report transition " +<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            (pause?<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>                " immediately."),<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>            ioe);<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        tries++;<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        if (rssStub == rss) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>          rssStub = null;<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>        }<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>      }<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>    }<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    return false;<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>  }<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span><a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>  /**<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>   */<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      return;<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>          region.conf)) {<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      region.setReadsEnabled(true);<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>      return;<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    }<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span><a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span><a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    if (this.executorService != null) {<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>    } else {<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>        region.getRegionInfo());<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>     }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>  }<a name="line.2476"></a>
+<span class="sourceLineNo">2394</span>    for (long procId: procIds) {<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>      transition.addProcId(procId);<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>    return builder.build();<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>  }<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span><a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  @Override<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>      return skipReportingTransition(context);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    final ReportRegionStateTransitionRequest request =<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>        createReportRegionStateTransitionRequest(context);<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span><a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>    final long initPauseTime = 1000;<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    int tries = 0;<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    long pauseTime;<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>    // HRegionServer does down.<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>      try {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>        if (rss == null) {<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>          createRegionServerStatusStub();<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>          continue;<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>        }<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>        ReportRegionStateTransitionResponse response =<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>          rss.reportRegionStateTransition(null, request);<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>        if (response.hasErrorMessage()) {<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>          break;<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>        }<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>        }<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>        // NOTE: Return mid-method!!!<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>        return true;<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>      } catch (ServiceException se) {<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>        boolean pause =<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>        if (pause) {<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>          // Do backoff else we flood the Master with requests.<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>        } else {<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>          pauseTime = initPauseTime; // Reset.<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>        }<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>        LOG.info("Failed report transition " +<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>            (pause?<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>                " immediately."),<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>            ioe);<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>        tries++;<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>        if (rssStub == rss) {<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>          rssStub = null;<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>        }<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      }<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>    }<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>    return false;<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>  }<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span><a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>  /**<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>   */<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>      return;<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>    }<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>          region.conf)) {<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>      region.setReadsEnabled(true);<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>      return;<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>    }<a name="line.2476"></a>
 <span class="sourceLineNo">2477</span><a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>  @Override<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>  public RpcServerInterface getRpcServer() {<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    return rpcServices.rpcServer;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>  }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>  @VisibleForTesting<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>  public RSRpcServices getRSRpcServices() {<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    return rpcServices;<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>  }<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span><a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>  /**<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>   *<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>   * @param reason<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>   *          the reason we are aborting<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>   * @param cause<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>   *          the exception that caused the abort, or null<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>   */<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>  @Override<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>  public void abort(String reason, Throwable cause) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    if (!setAbortRequested()) {<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      // Abort already in progress, ignore the new request.<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>      LOG.debug(<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      return;<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    }<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    if (cause != null) {<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    } else {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>    }<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>    try {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span><a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>    try {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (cause != null) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      }<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      // Report to the master but only if we have already registered with the master.<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>        builder.setErrorMessage(msg);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    } catch (Throwable t) {<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span><a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>    scheduleAbortTimer();<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>    // shutdown should be run as the internal user<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>    stop(reason, true, null);<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>  }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>  /**<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>   * Sets the abort state if not already set.<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>   * progress.<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>   */<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>  protected boolean setAbortRequested() {<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    return abortRequested.compareAndSet(false, true);<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>  }<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span><a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>  /**<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>   */<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>  public void abort(String reason) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>    abort(reason, null);<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>  }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>  @Override<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>  public boolean isAborted() {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    return abortRequested.get();<a name="line.2565"></a>
+<span class="sourceLineNo">2478</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span><a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>    if (this.executorService != null) {<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>    } else {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>        region.getRegionInfo());<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>     }<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>  }<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span><a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>  @Override<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>  public RpcServerInterface getRpcServer() {<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    return rpcServices.rpcServer;<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>  }<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span><a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>  @VisibleForTesting<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>  public RSRpcServices getRSRpcServices() {<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    return rpcServices;<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  }<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span><a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>  /**<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>   *<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>   * @param reason<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>   *          the reason we are aborting<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>   * @param cause<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>   *          the exception that caused the abort, or null<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>   */<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>  @Override<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  public void abort(String reason, Throwable cause) {<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>    if (!setAbortRequested()) {<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>      // Abort already in progress, ignore the new request.<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>      LOG.debug(<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>      return;<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    }<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>    if (cause != null) {<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>    } else {<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>    }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    try {<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>    }<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span><a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>    try {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>      if (cause != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      // Report to the master but only if we have already registered with the master.<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>        builder.setErrorMessage(msg);<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>      }<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>    } catch (Throwable t) {<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span><a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    scheduleAbortTimer();<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>    // shutdown should be run as the internal user<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>    stop(reason, true, null);<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>  }<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span><a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>  /**<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>   * Sets the abort state if not already set.<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>   * progress.<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>   */<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>  protected boolean setAbortRequested() {<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    return abortRequested.compareAndSet(false, true);<a name="line.2565"></a>
 <span class="sourceLineNo">2566</span>  }<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span><a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>  /*<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>   * hostname+port immediately.<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>   */<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>  @VisibleForTesting<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>  protected void kill() {<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>    this.killed = true;<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>    abort("Simulated kill");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>  }<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span><a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>  // Limits the time spent in the shutdown process.<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>  private void scheduleAbortTimer() {<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    if (this.abortMonitor == null) {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      TimerTask abortTimeoutTask = null;<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      try {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>        timerTaskCtor.setAccessible(true);<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      } catch (Exception e) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>      }<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      if (abortTimeoutTask != null) {<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      }<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>    }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>  }<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span><a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  /**<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>   * have already been called.<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>   */<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>  protected void stopServiceThreads() {<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>    // clean up the scheduled chores<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    if (this.choreService != null) {<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      choreService.cancelChore(compactionChecker);<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      choreService.cancelChore(periodicFlusher);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>      choreService.cancelChore(healthCheckChore);<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>      choreService.cancelChore(executorStatusChore);<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>      choreService.cancelChore(storefileRefresher);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      choreService.shutdown();<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span><a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>    if (this.cacheFlusher != null) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>      this.cacheFlusher.join();<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>    }<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span><a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    if (this.spanReceiverHost != null) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>      this.spanReceiverHost.closeReceivers();<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>    }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    if (this.walRoller != null) {<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      this.walRoller.close();<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>    }<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    if (this.compactSplitThread != null) {<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      this.compactSplitThread.join();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    if (this.executorService != null) this.executorService.shutdown();<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        this.replicationSourceHandler == this.replicationSinkHandler) {<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>    } else {<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      if (this.replicationSourceHandler != null) {<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>      }<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      if (this.replicationSinkHandler != null) {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>      }<a name="line.2641"></a>
+<span class="sourceLineNo">2568</span>  /**<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>   */<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>  public void abort(String reason) {<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    abort(reason, null);<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>  }<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span><a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>  @Override<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>  public boolean isAborted() {<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>    return abortRequested.get();<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>  }<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span><a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>  /*<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>   * hostname+port immediately.<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>   */<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>  @VisibleForTesting<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>  protected void kill() {<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    this.killed = true;<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    abort("Simulated kill");<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>  }<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span><a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>  // Limits the time spent in the shutdown process.<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>  private void scheduleAbortTimer() {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>    if (this.abortMonitor == null) {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>      TimerTask abortTimeoutTask = null;<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      try {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>        timerTaskCtor.setAccessible(true);<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>      } catch (Exception e) {<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>      }<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>      if (abortTimeoutTask != null) {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>      }<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>    }<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>  }<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span><a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>  /**<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>   * have already been called.<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>   */<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>  protected void stopServiceThreads() {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>    // clean up the scheduled chores<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    if (this.choreService != null) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>      choreService.cancelChore(compactionChecker);<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      choreService.cancelChore(periodicFlusher);<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>      choreService.cancelChore(healthCheckChore);<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>      choreService.cancelChore(executorStatusChore);<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>      choreService.cancelChore(storefileRefresher);<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>      choreService.shutdown();<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>    }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>    if (this.cacheFlusher != null) {<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>      this.cacheFlusher.join();<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    }<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span><a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>    if (this.spanReceiverHost != null) {<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>      this.spanReceiverHost.closeReceivers();<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>    }<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>    if (this.walRoller != null) {<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>      this.walRoller.close();<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    }<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    if (this.compactSplitThread != null) {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>      this.compactSplitThread.join();<a name="line.2641"></a>
 <span class="sourceLineNo">2642</span>    }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span><a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>  /**<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>   * @return Return the object that implements the replication<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>   * source executorService.<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>   */<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>  @Override<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    return replicationSourceHandler;<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>  }<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span><a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>  /**<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>   */<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    return replicationSinkHandler;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>  }<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span><a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>  /**<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>   * Method will block until a master is available. You can break from this<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>   * block by requesting the server stop.<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>   *<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>   * @return master + port, or null if server has been stopped<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>   */<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    return createRegionServerStatusStub(false);<a name="line.2671"></a>
+<span class="sourceLineNo">2643</span>    if (this.executorService != null) {<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      this.executorService.shutdown();<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    }<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    } else {<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>      if (this.replicationSourceHandler != null) {<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>      }<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>      if (this.replicationSinkHandler != null) {<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>      }<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>    }<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  }<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>  /**<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>   * @return Return the object that implements the replication<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>   * source executorService.<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>   */<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>  @Override<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    return replicationSourceHandler;<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>  }<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span><a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>  /**<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>   */<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    return replicationSinkHandler;<a name="line.2671"></a>
 <span class="sourceLineNo">2672</span>  }<a name="line.2672"></a>
 <span class="sourceLineNo">2673</span><a name="line.2673"></a>
 <span class="sourceLineNo">2674</span>  /**<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   * You can break from this block by requesting the server stop.<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   * @return master + port, or null if server has been stopped<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>  @VisibleForTesting<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (rssStub != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      return masterAddressTracker.getMasterAddress();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    ServerName sn = null;<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>    long previousLogTime = 0;<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>    boolean interrupted = false;<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>    try {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      while (keepLooping()) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>        if (sn == null) {<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>          if (!keepLooping()) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>            // give up with no connection.<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>            return null;<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>          }<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>            LOG.debug("No master found; retry");<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>            previousLogTime = System.currentTimeMillis();<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>          }<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>          if (sleepInterrupted(200)) {<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>            interrupted = true;<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>          }<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>          continue;<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        }<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span><a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>        // If we are on the active master, use the shortcut<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>          break;<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>        }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        try {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>          BlockingRpcChannel channel =<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>              shortOperationTimeout);<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          break;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        } catch (IOException e) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            e = e instanceof RemoteException ?<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>            } else {<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>            }<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>            previousLogTime = System.currentTimeMillis();<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          }<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          if (sleepInterrupted(200)) {<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>            interrupted = true;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>          }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>        }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      }<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>      if (interrupted) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        Thread.currentThread().interrupt();<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    }<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    this.rssStub = intRssStub;<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>    this.lockStub = intLockStub;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    return sn;<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>  }<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span><a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>  /**<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>   * @return True if we should break loop because cluster is going down or<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>   */<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>  private boolean keepLooping() {<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  /*<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>   * us by the master.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * null if we failed to register.<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @throws IOException<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>    if (masterServerName == null || rss == null) return null;<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    RegionServerStartupResponse result = null;<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>    try {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>      rpcServices.requestCount.reset();<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      int port = rpcServices.isa.getPort();<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      }<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>      request.setPort(port);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      request.setServerStartCode(this.startcode);<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      request.setServerCurrentTime(now);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    } catch (ServiceException se) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>            ioe);<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        // Re-throw IOE will cause RS to abort<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>        throw ioe;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        LOG.debug("Master is not running yet");<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>      } else {<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>        LOG.warn("error telling master we are up", se);<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>      }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      rssStub = null;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>    }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    return result;<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>  @Override<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>    try {<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      if (rss == null) { // Try to connect one more time<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>        createRegionServerStatusStub();<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>        rss = rssStub;<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>        if (rss == null) {<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>          // Still no luck, we tried<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>              .build();<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>        }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    } catch (ServiceException e) {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>          .build();<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>  }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span><a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>  /**<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>   * Close meta region if we carry it<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>   * @param abort Whether we're running an abort.<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>   */<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    HRegion meta = null;<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>    try {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>        if (hri.isMetaRegion()) {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>          meta = e.getValue();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>        }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>        if (meta != null) break;<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>      }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    } finally {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>  }<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span><a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>  /**<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   * Schedule closes on all user regions.<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>   * that are already closed or that are closing.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>   * @param abort Whether we're running an abort.<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>   */<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>  private void closeUserRegions(final boolean abort) {<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>    try {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        HRegion r = e.getValue();<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>          // Don't update zk with this close transition; pass false.<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>        }<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>      }<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>    } finally {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  /** @return the info server */<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public InfoServer getInfoServer() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return infoServer;<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * @return true if a stop has been requested.<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   */<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>  @Override<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>  public boolean isStopped() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>    return this.stopped;<a name="line.2887"></a>
+<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>   * Method will block until a master is available. You can break from this<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   * block by requesting the server stop.<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   *<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   * @return master + port, or null if server has been stopped<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   */<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>    return createRegionServerStatusStub(false);<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span><a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>  /**<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>   * You can break from this block by requesting the server stop.<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>   * @return master + port, or null if server has been stopped<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  @VisibleForTesting<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    if (rssStub != null) {<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      return masterAddressTracker.getMasterAddress();<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>    ServerName sn = null;<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    long previousLogTime = 0;<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    boolean interrupted = false;<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>    try {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>      while (keepLooping()) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>        if (sn == null) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>          if (!keepLooping()) {<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>            // give up with no connection.<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>            return null;<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>          }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>            LOG.debug("No master found; retry");<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>            previousLogTime = System.currentTimeMillis();<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>          }<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>          if (sleepInterrupted(200)) {<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            interrupted = true;<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>          }<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>          continue;<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>        }<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>        // If we are on the active master, use the shortcut<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          break;<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>        }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>        try {<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          BlockingRpcChannel channel =<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>              shortOperationTimeout);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>          break;<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>        } catch (IOException e) {<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>            e = e instanceof RemoteException ?<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>            } else {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>            }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>            previousLogTime = System.currentTimeMillis();<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>          }<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (sleepInterrupted(200)) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            interrupted = true;<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>        }<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>      }<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>    } finally {<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>      if (interrupted) {<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        Thread.currentThread().interrupt();<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    this.rssStub = intRssStub;<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>    this.lockStub = intLockStub;<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    return sn;<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>  }<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span><a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>  /**<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>   * @return True if we should break loop because cluster is going down or<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>   */<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  private boolean keepLooping() {<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>  }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span><a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  /*<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>   * us by the master.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>   * null if we failed to register.<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>   * @throws IOException<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>   */<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>    if (masterServerName == null || rss == null) return null;<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    RegionServerStartupResponse result = null;<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    try {<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>      rpcServices.requestCount.reset();<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      int port = rpcServices.isa.getPort();<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>      }<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      request.setPort(port);<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>      request.setServerStartCode(this.startcode);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>      request.setServerCurrentTime(now);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>    } catch (ServiceException se) {<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>            ioe);<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>        // Re-throw IOE will cause RS to abort<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>        throw ioe;<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>        LOG.debug("Master is not running yet");<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      } else {<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>        LOG.warn("error telling master we are up", se);<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      }<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>      rssStub = null;<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>    }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    return result;<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>    try {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>      if (rss == null) { // Try to connect one more time<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>        createRegionServerStatusStub();<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>        rss = rssStub;<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>        if (rss == null) {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>          // Still no luck, we tried<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>              .build();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>        }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      }<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>    } catch (ServiceException e) {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>          .build();<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    }<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span><a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>   * Close meta region if we carry it<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>   * @param abort Whether we're running an abort.<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>   */<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>    HRegion meta = null;<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>    try {<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>        if (hri.isMetaRegion()) {<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>          meta = e.getValue();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>        if (meta != null) break;<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      }<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    } finally {<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    }<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>  }<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span><a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>  /**<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   * Schedule closes on all user regions.<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>   * that are already closed or that are closing.<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>   * @param abort Whether we're running an abort.<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>   */<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  private void closeUserRegions(final boolean abort) {<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>    try {<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>        HRegion r = e.getValue();<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>          // Don't update zk with this close transition; pass false.<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>        }<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    } finally {<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>    }<a name="line.2887"></a>
 <span class="sourceLineNo">2888</span>  }<a name="line.2888"></a>
 <span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>  @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  public boolean isStopping() {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>    return this.stopping;<a name="line.2892"></a>
+<span class="sourceLineNo">2890</span>  /** @return the info server */<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>  public InfoServer getInfoServer() {<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>    return infoServer;<a name="line.2892"></a>
 <span class="sourceLineNo">2893</span>  }<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>  @Override<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public Configuration getConfiguration() {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    return conf;<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>  }<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span><a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    return this.onlineRegions;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>  public int getNumberOfOnlineRegions() {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    return this.onlineRegions.size();<a name="line.2905"></a>
+<span class="sourceLineNo">2895</span>  /**<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>   * @return true if a stop has been requested.<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>   */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>  @Override<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>  public boolean isStopped() {<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    return this.stopped;<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>  }<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span><a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>  @Override<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>  public boolean isStopping() {<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    return this.stopping;<a name="line.2905"></a>
 <span class="sourceLineNo">2906</span>  }<a name="line.2906"></a>
 <span class="sourceLineNo">2907</span><a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  /**<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>   * For tests, web ui and metrics.<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>   */<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    return Collections.unmodifiableCollection(regions);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  }<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span><a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>  @Override<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>  public void addRegion(HRegion region) {<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>    configurationManager.registerObserver(region);<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  }<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span><a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>      long size) {<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    }<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    sortedRegions.get(size).add(region);<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  /**<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>   *   the biggest.<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    // we'll sort the regions in reverse<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2940"></a>
+<span class="sourceLineNo">2908</span>  @Override<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  public Configuration getConfiguration() {<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    return conf;<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  }<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span><a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>    return this.onlineRegions;<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>  }<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span><a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>  public int getNumberOfOnlineRegions() {<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    return this.onlineRegions.size();<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>  }<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span><a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>  /**<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>   * For tests, web ui and metrics.<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>    return Collections.unmodifiableCollection(regions);<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>  }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span><a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  @Override<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>  public void addRegion(HRegion region) {<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    configurationManager.registerObserver(region);<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  }<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>      long size) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2940"></a>
 <span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>    return sortedRegions;<a name="line.2942"></a>
+<span class="sourceLineNo">2942</span>    sortedRegions.get(size).add(region);<a name="line.2942"></a>
 <span class="sourceLineNo">2943</span>  }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>  /**<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>   *   biggest.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    // we'll sort the regions in reverse<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>    }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>    return sortedRegions;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>  }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span><a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  /**<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>   * @return time stamp in millis of when this region server was started<a name="line.2960"></a>
+<span class="sourceLineNo">2944</span>  /**<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>   *   the biggest.<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   */<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    // we'll sort the regions in reverse<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>    }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>    return sortedRegions;<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>  }<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span><a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  /**<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>   *   biggest.<a name="line.2960"></a>
 <span class="sourceLineNo">2961</span>   */<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>  public long getStartcode() {<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>    return this.startcode;<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>  }<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span><a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>  /** @return reference to FlushRequester */<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>  @Override<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>  public FlushRequester getFlushRequester() {<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    return this.cacheFlusher;<a name="line.2969"></a>
+<span class="sourceLineNo">2962</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>    // we'll sort the regions in reverse<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>    }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>    return sortedRegions;<a name="line.2969"></a>
 <span class="sourceLineNo">2970</span>  }<a name="line.2970"></a>
 <span class="sourceLineNo">2971</span><a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>  @Override<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    return this.compactSplitThread;<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>  }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span><a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  @Override<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  public LeaseManager getLeaseManager() {<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    return leaseManager;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>  /**<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @return Return the rootDir.<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   */<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>  protected Path getDataRootDir() {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>    return dataRootDir;<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  }<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span><a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>  @Override<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  public FileSystem getFileSystem() {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    return dataFs;<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span><a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  /**<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   */<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>  boolean isDataFileSystemOk() {<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>    return this.dataFsOk;<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>  }<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span><a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>  /**<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   * @return Return the walRootDir.<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>   */<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>  public Path getWALRootDir() {<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    return walRootDir;<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>  }<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span><a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>  /**<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>   * @return Return the walFs.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>   */<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  public FileSystem getWALFileSystem() {<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>    return walFs;<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>  }<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span><a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>  @Override<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>  public String toString() {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>    return getServerName().toString();<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>  }<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>  @Override<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>  public ZKWatcher getZooKeeper() {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    return zooKeeper;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span><a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  @Override<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>    return csm;<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>  }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span><a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>  @Override<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>  public ServerName getServerName() {<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>    return serverName;<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span><a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>    return this.rsHost;<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  }<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span><a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  @Override<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    return this.regionsInTransitionInRS;<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>  }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span><a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>  @Override<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>  public ExecutorService getExecutorService() {<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>    return executorService;<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span><a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  @Override<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>  public ChoreService getChoreService() {<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>    return choreService;<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>  }<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span><a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>  @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return rsQuotaManager;<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>  }<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span><a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>  //<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>  // Main program and support routines<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  //<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>   * Load the replication executorService objects, if any<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>    // read in the name of the source replication class from the config file.<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span><a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>    // read in the name of the sink replication class from the config file.<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>    // only one object.<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>    } else {<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>    }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>  }<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span><a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      throw new IOException("Could not find class for " + classname);<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    }<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    return service;<a name="line.3101"></a>
+<span class="sourceLineNo">2972</span>  /**<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   * @return time stamp in millis of when this region server was started<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   */<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  public long getStartcode() {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>    return this.startcode;<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>  }<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span><a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>  /** @return reference to FlushRequester */<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>  @Override<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>  public FlushRequester getFlushRequester() {<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return this.cacheFlusher;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  @Override<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>    return this.compactSplitThread;<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>  }<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span><a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>  @Override<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>  public LeaseManager getLeaseManager() {<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    return leaseManager;<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * @return Return the rootDir.<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   */<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  protected Path getDataRootDir() {<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    return dataRootDir;<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>  }<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span><a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  @Override<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  public FileSystem getFileSystem() {<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>    return dataFs;<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  }<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span><a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>  /**<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   */<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  boolean isDataFileSystemOk() {<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    return this.dataFsOk;<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span><a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>   * @return Return the walRootDir.<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>   */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  public Path getWALRootDir() {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    return walRootDir;<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  }<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>  /**<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * @return Return the walFs.<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>  public FileSystem getWALFileSystem() {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    return walFs;<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>  }<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span><a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>  @Override<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  public String toString() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    return getServerName().toString();<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>  }<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span><a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>  @Override<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>  public ZKWatcher getZooKeeper() {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    return zooKeeper;<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span><a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>    return csm;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>  }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public ServerName getServerName() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    return serverName;<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    return this.rsHost;<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>  }<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span><a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>  @Override<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    return this.regionsInTransitionInRS;<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>  }<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span><a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  @Override<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public ExecutorService getExecutorService() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    return executorService;<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  }<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  @Override<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>  public ChoreService getChoreService() {<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    return choreService;<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  }<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span><a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>  @Override<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>    return rsQuotaManager;<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  }<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span><a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>  //<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>  // Main program and support routines<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  //<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>  /**<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   * Load the replication executorService objects, if any<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>   */<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>    // read in the name of the source replication class from the config file.<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span><a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    // read in the name of the sink replication class from the config file.<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span><a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    // only one object.<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>      server.sameReplicationSourceAndSink = true;<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>    } else {<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>      server.sameReplicationSourceAndSink = false;<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
 <span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
 <span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>    if(!this.isOnline()){<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>      return walGroupsReplicationStatus;<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>    }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>    }<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    return walGroupsReplicationStatus;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>  }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>  /**<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   */<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>  static HRegionServer constructRegionServer(<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      final Configuration conf<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>  ) {<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    try {<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      return c.newInstance(conf);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>    } catch (Exception e) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>          + regionServerClass.toString(), e);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>    }<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>  }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span><a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>  /**<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>   */<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>  public static void main(String[] args) {<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>    VersionInfo.logVersion();<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    @SuppressWarnings("unchecked")<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  }<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span><a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>  /**<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>   * Gets the online regions of the specified table.<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>   * all the ONLINE regions in the table.<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>   * @param tableName table to limit the scope of the query<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>   */<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>  @Override<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>     synchronized (this.onlineRegions) {<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>           tableRegions.add(region);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>         }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>       }<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>     }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>     return tableRegions;<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>   }<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span><a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>  @Override<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    List&lt;HRegion&gt; allRegions;<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>    synchronized (this.onlineRegions) {<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>      // Return a clone copy of the onlineRegions<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    }<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>    return allRegions;<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>  }<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span><a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>  /**<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   * Gets the online tables in this RS.<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * This method looks at the in-memory onlineRegions.<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return all the online tables in this RS<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   */<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    synchronized (this.onlineRegions) {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      }<a name="line.3193"></a>
+<span class="sourceLineNo">3104</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>    try {<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>      throw new IOException("Could not find class for " + classname);<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>    }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    return service;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>  }<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span><a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    if(!this.isOnline()){<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      return walGroupsReplicationStatus;<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>    }<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    }<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    return walGroupsReplicationStatus;<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>  }<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span><a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>  /**<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>   */<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>  static HRegionServer constructRegionServer(<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      final Configuration conf<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>  ) {<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>    try {<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>      return c.newInstance(conf);<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    } catch (Exception e) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          + regionServerClass.toString(), e);<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span><a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>  /**<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>   */<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>  public static void main(String[] args) {<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    VersionInfo.logVersion();<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>    @SuppressWarnings("unchecked")<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span><a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>  }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>  /**<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>   * Gets the online regions of the specified table.<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>   * all the ONLINE regions in the table.<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>   * @param tableName table to limit the scope of the query<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>   */<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>  @Override<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>     synchronized (this.onlineRegions) {<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>           tableRegions.add(region);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>         }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>       }<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>     }<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>     return tableRegions;<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>   }<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span><a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>  @Override<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    List&lt;HRegion&gt; allRegions;<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>    synchronized (this.onlineRegions) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>      // Return a clone copy of the onlineRegions<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3193"></a>
 <span class="sourceLineNo">3194</span>    }<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    return tables;<a name="line.3195"></a>
+<span class="sourceLineNo">3195</span>    return allRegions;<a name="line.3195"></a>
 <span class="sourceLineNo">3196</span>  }<a name="line.3196"></a>
 <span class="sourceLineNo">3197</span><a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>  public String[] getRegionServerCoprocessors() {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    try {<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>    } catch (IOException exception) {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>          "skipping.");<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>    }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    for (HRegion region: regions) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>      try {<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      } catch (IOException exception) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>            "; skipping.");<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>      }<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>    }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>    return coprocessors.toArray(new String[0]);<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>  }<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span><a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>  /**<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>   * @param region Region to close<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>   */<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>    try {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>            " - ignoring and continuing");<a name="line.3230"></a>
+<span class="sourceLineNo">3198</span>  /**<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>   * Gets the online tables in this RS.<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>   * This method looks at the in-memory onlineRegions.<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>   * @return all the online tables in this RS<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>   */<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>    synchronized (this.onlineRegions) {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      }<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>    }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>    return tables;<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>  }<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span><a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>  public String[] getRegionServerCoprocessors() {<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>    try {<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>    } catch (IOException exception) {<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>          "skipping.");<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>    }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    for (HRegion region: regions) {<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>      try {<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span>      } catch (IOException exception) {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>            "; skipping.");<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3230"></a>
 <span class="sourceLineNo">3231</span>      }<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    } catch (IOException e) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>          " - ignoring and continuing", e);<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    }<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  /**<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>   *<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>   * &lt;p&gt;<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>   * &lt;/p&gt;<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span><a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>   * &lt;p&gt;<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>   * &lt;/p&gt;<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>   *<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>   * @param encodedName Region to close<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>   * @param abort True if we are aborting<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>   * @return True if closed a region.<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>   * @throws NotServingRegionException if the region is not online<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>   */<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>        final ServerName destination)<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>      throws NotServingRegionException {<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>    //Check for permissions to close.<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>    // Can be null if we're calling close on a region that's not online<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>      try {<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>      } catch (IOException exp) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>        return false;<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>      }<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    }<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span><a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>    // previous can come back 'null' if not in map.<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>        Boolean.FALSE);<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span><a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>        // We're going to try to do a standard close then.<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>            " Doing a standard close now");<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>        return closeRegion(encodedName, abort, destination);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>      }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>      // Let's get the region from the online region list again<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>      actualRegion = this.getRegion(encodedName);<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>        // The master deletes the znode when it receives this exception.<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>      }<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>    } else if (previous == null) {<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      return true;<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>    }<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span><a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>    if (actualRegion == null) {<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>      // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>          " is not online, and is not opening.");<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>    }<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span><a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>    CloseRegionHandler crh;<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>    if (hri.isMetaRegion()) {<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>    } else {<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>    }<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>    this.executorService.submit(crh);<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    return true;<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span><a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>   /**<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>   *         named region is not member of the online regions.<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>   */<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>  }<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span><a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>  @Override<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>  }<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span><a name="line.3334"></a>
+<span class="sourceLineNo">3232</span>    }<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>    return coprocessors.toArray(new String[0]);<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>  }<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span><a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>  /**<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>   * @param region Region to close<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>   */<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    try {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>            " - ignoring and continuing");<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>      }<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>    } catch (IOException e) {<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>          " - ignoring and continuing", e);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>    }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>  }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span><a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>  /**<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>   *<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>   * &lt;p&gt;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>   * &lt;/p&gt;<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span><a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * &lt;p&gt;<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>   * &lt;/p&gt;<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>   *<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * @param encodedName Region to close<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * @param abort True if we are aborting<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>   * @return True if closed a region.<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>   * @throws NotServingRegionException if the region is not online<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>   */<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>        final ServerName destination)<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>      throws NotServingRegionException {<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>    //Check for permissions to close.<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>    // Can be null if we're calling close on a region that's not online<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>      try {<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>      } catch (IOException exp) {<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>        return false;<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>      }<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    }<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span><a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>    // previous can come back 'null' if not in map.<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>        Boolean.FALSE);<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span><a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>        // We're going to try to do a standard close then.<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>            " Doing a standard close now");<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>        return closeRegion(encodedName, abort, destination);<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>      }<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>      // Let's get the region from the online region list again<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>      actualRegion = this.getRegion(encodedName);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>        // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>      }<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    } else if (previous == null) {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>      return true;<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>    }<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span><a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>    if (actualRegion == null) {<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>      // The master deletes the znode when it receives this exception.<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>          " is not online, and is not opening.");<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>    }<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span><a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>    CloseRegionHandler crh;<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>    if (hri.isMetaRegion()) {<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>    } else {<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    }<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    this.executorService.submit(crh);<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>    return true;<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>  }<a name="line.3334"></a>
 <span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>  @Override<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>    if (destination != null) {<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>      }<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>      if (selfMove) {<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>      }<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    }<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>    configurationManager.deregisterObserver(r);<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>    return toReturn != null;<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>  }<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span><a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>  /**<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>   *<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>   */<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      throws NotServingRegionException {<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  }<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span><a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>      throws NotServingRegionException {<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>  }<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span><a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>    throws NotServingRegionException {<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>    if (region == null) {<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>      if (moveInfo != null) {<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>      }<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>      String regionNameStr = regionName == null?<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>          " is opening on " + this.serverName);<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>      }<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>        " is not online on " + this.serverName);<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>    }<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return region;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  /**<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>   * IOE if it isn't already.<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>   *<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>   * @param t Throwable<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>   * @param msg Message to log in error. Can be null.<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>   */<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>    if (t instanceof NotServingRegionException) {<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>      return t;<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>    }<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>    if (msg == null) {<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>      LOG.error("", e);<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>    } else {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>      LOG.error(msg, e);<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    }<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      checkFileSystem();<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>    }<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>    return t;<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>  }<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span><a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  /**<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>   */<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>  }<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span><a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>  /**<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * abortRequested and stopRequested<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   *<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @return false if file system is not available<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   */<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>  boolean checkFileSystem() {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>      try {<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>      } catch (IOException e) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>        abort("File System not available", e);<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>        this.dataFsOk = false;<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      }<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>    }<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>    return this.dataFsOk;<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>  }<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span><a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>  @Override<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>          favoredNodes.get(i).getPort());<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>  }<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span><a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>  /**<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>   *<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>   * @return array of favored locations<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>   */<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>  @Override<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span><a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  @Override<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>  public ServerNonceManager getNonceManager() {<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>    return this.nonceManager;<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>  }<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span><a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  private static class MovedRegionInfo {<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>    private final ServerName serverName;<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>    private final long seqNum;<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span><a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>      this.serverName = serverName;<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>      this.seqNum = closeSeqNum;<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>     }<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span><a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>    public ServerName getServerName() {<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>      return serverName;<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>    }<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span><a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>    public long getSeqNum() {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      return seqNum;<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>    }<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>  }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span><a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>  /**<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>   * the number of network calls instead of reducing them.<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>   */<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3501"></a>
+<span class="sourceLineNo">3336</span>   /**<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>   *         named region is not member of the online regions.<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>   */<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>  }<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span><a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>  @Override<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>  }<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span><a name="line.3349"></a>
+<span class="sourceLineNo">3350</span><a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>  @Override<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    if (destination != null) {<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      }<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>      if (selfMove) {<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>    }<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>    configurationManager.deregisterObserver(r);<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>    return toReturn != null;<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>  }<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span><a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>  /**<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   *<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   */<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>      throws NotServingRegionException {<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  }<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span><a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      throws NotServingRegionException {<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>  }<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span><a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>    throws NotServingRegionException {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    if (region == null) {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>      if (moveInfo != null) {<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>      }<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>      String regionNameStr = regionName == null?<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>          " is opening on " + this.serverName);<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>      }<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>        " is not online on " + this.serverName);<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>    }<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>    return region;<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>  }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span><a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>  /**<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>   * IOE if it isn't already.<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>   *<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>   * @param t Throwable<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>   * @param msg Message to log in error. Can be null.<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>   */<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    if (t instanceof NotServingRegionException) {<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>      return t;<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>    }<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>    if (msg == null) {<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>      LOG.error("", e);<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>    } else {<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>      LOG.error(msg, e);<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>    }<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>      checkFileSystem();<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>    }<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>    return t;<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>  }<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span><a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>  /**<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   */<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>  }<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span><a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>  /**<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>   * abortRequested and stopRequested<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>   *<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>   * @return false if file system is not available<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>   */<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>  boolean checkFileSystem() {<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>      try {<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      } catch (IOException e) {<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>        abort("File System not available", e);<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>        this.dataFsOk = false;<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>      }<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>    }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>    return this.dataFsOk;<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>  }<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span><a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>  @Override<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>          favoredNodes.get(i).getPort());<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    }<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>  }<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span><a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>  /**<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   *<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   * @return array of favored locations<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>   */<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>  @Override<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>  }<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span><a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>  @Override<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>  public ServerNonceManager getNonceManager() {<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>    return this.nonceManager;<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>  }<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span><a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>  private static class MovedRegionInfo {<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>    private final ServerName serverName;<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    private final long seqNum;<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span><a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>      this.serverName = serverName;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>      this.seqNum = closeSeqNum;<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>     }<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span><a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>    if (selfMove) {<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>      return;<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>    }<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>        closeSeqNum);<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span><a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>  }<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span><a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>  @VisibleForTesting<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>  }<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span><a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>  @VisibleForTesting<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>  public int movedRegionCacheExpiredTime() {<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>        return TIMEOUT_REGION_MOVED;<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>  }<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span><a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>  private String getMyEphemeralNodePath() {<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>  }<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span><a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>  private boolean isHealthCheckerConfigured() {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>  }<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span><a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>  /**<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>   */<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>  public CompactSplit getCompactSplitThread() {<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>    return this.compactSplitThread;<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>  }<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span><a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>    try {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>      String serviceName = call.getServiceName();<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>      if (service == null) {<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>            serviceName);<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>      }<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>      ServiceDescriptor serviceDesc =<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>          service.getDescriptorForType();<a name="line.3556"></a>
+<span class="sourceLineNo">3503</span>    public ServerName getServerName() {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>      return serverName;<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>    }<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span><a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>    public long getSeqNum() {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>      return seqNum;<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>    }<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span><a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>   * the number of network calls instead of reducing them.<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span><a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>    if (selfMove) {<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>      return;<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>    }<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>        closeSeqNum);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>  }<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span><a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>  }<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span><a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  @VisibleForTesting<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>  }<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span><a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>  @VisibleForTesting<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>  public int movedRegionCacheExpiredTime() {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        return TIMEOUT_REGION_MOVED;<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>  }<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  private String getMyEphemeralNodePath() {<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>  }<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span><a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>  private boolean isHealthCheckerConfigured() {<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>  }<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span><a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>  /**<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>   */<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>  public CompactSplit getCompactSplitThread() {<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>    return this.compactSplitThread;<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>  }<a name="line.3556"></a>
 <span class="sourceLineNo">3557</span><a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>      String methodName = call.getMethodName();<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>      MethodDescriptor methodDesc =<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>          serviceDesc.findMethodByName(methodName);<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>      if (methodDesc == null) {<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>            " called on executorService " + serviceName);<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>      }<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span><a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>      Message request =<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>      final Message.Builder responseBuilder =<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>        if (message != null) {<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>          responseBuilder.mergeFrom(message);<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>        }<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      });<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>      if (exception != null) {<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>        throw exception;<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>      }<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>    } catch (IOException ie) {<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>      throw new ServiceException(ie);<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>    }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>  }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span><a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>  /**<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>   * May be null if this is a master which not carry table.<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>   *<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>   * @return The block cache instance used by the regionserver.<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>   */<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>  @Override<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>    return Optional.ofNullable(this.blockCache);<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>  }<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span><a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>  /**<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>   * May be null if this is a master which not carry table.<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>   *<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>   * @return The cache for mob files used by the regionserver.<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>   */<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>  @Override<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>  }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span><a name="line.3604"></a>
+<span class="sourceLineNo">3558</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>    try {<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>      String serviceName = call.getServiceName();<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>      if (service == null) {<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>            serviceName);<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>      }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>      ServiceDescriptor serviceDesc =<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>          service.getDescriptorForType();<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span><a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>      String methodName = call.getMethodName();<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>      MethodDescriptor methodDesc =<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>          serviceDesc.findMethodByName(methodName);<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>      if (methodDesc == null) {<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>            " called on executorService " + serviceName);<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>      }<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span><a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>      Message request =<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>      final Message.Builder responseBuilder =<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>        if (message != null) {<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>          responseBuilder.mergeFrom(message);<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>        }<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      });<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      if (exception != null) {<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>        throw exception;<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>      }<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>    } catch (IOException ie) {<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>      throw new ServiceException(ie);<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>    }<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  }<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span><a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>  /**<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>   * May be null if this is a master which not carry table.<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>   *<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>   * @return The block cache instance used by the regionserver.<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>   */<a name="line.3604"></a>
 <span class="sourceLineNo">3605</span>  @Override<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>  public AccessChecker getAccessChecker() {<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>    return rpcServices.getAccessChecker();<a name="line.3607"></a>
+<span class="sourceLineNo">3606</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>    return Optional.ofNullable(this.blockCache);<a name="line.3607"></a>
 <span class="sourceLineNo">3608</span>  }<a name="line.3608"></a>
 <span class="sourceLineNo">3609</span><a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>  @Override<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>  }<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span><a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>  /**<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>   */<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>  @VisibleForTesting<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>  ConfigurationManager getConfigurationManager() {<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    return configurationManager;<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>  }<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span><a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>  /**<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>   * @return Return table descriptors implementation.<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>   */<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>  @Override<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>  public TableDescriptors getTableDescriptors() {<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    return this.tableDescriptors;<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>  }<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span><a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  /**<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>   * Reload the configuration from disk.<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>   */<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>  void updateConfiguration() {<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>    // Reload the configuration from disk.<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>    conf.reloadConfiguration();<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>    configurationManager.notifyAllObservers(conf);<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>  }<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span><a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>    long evictedBlocks = 0;<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span><a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>    for(Store store : region.getStores()) {<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>      }<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>    }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span><a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>    return CacheEvictionStats.builder()<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>        .build();<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>  }<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span><a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>  @Override<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>  public double getCompactionPressure() {<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>    double max = 0;<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    for (Region region : onlineRegions.values()) {<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>      for (Store store : region.getStores()) {<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>        double normCount = store.getCompactionPressure();<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>        if (normCount &gt; max) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>          max = normCount;<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>        }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>      }<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>    }<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>    return max;<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>  }<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span><a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>  @Override<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>    return hMemManager;<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>  }<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span><a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    return cacheFlusher;<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span><a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>  /**<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>   * For testing<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>   */<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>  @VisibleForTesting<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>  public boolean walRollRequestFinished() {<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    return this.walRoller.walRollFinished();<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>  }<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span><a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>  @Override<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>  public ThroughputController getFlushThroughputController() {<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>    return flushThroughputController;<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  }<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span><a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>  @Override<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>  public double getFlushPressure() {<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>      // return 0 during RS initialization<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>      return 0.0;<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    }<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span>  }<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span><a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>  @Override<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>    ThroughputController old = this.flushThroughputController;<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>    if (old != null) {<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>      old.stop("configuration change");<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>    }<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>    try {<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      Superusers.initialize(newConf);<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>    } catch (IOException e) {<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3711"></a>
+<span class="sourceLineNo">3610</span>  /**<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>   * May be null if this is a master which not carry table.<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>   *<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>   * @return The cache for mob files used by the regionserver.<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>   */<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>  @Override<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>  }<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span><a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>  @Override<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>  public AccessChecker getAccessChecker() {<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    return rpcServices.getAccessChecker();<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>  }<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span><a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>  @Override<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>  }<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span><a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>  /**<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>   */<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>  @VisibleForTesting<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  ConfigurationManager getConfigurationManager() {<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>    return configurationManager;<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>  }<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span><a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>  /**<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>   * @return Return table descriptors implementation.<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>   */<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>  @Override<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>  public TableDescriptors getTableDescriptors() {<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    return this.tableDescriptors;<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>  }<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span><a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>  /**<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>   * Reload the configuration from disk.<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>   */<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>  void updateConfiguration() {<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>    // Reload the configuration from disk.<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>    conf.reloadConfiguration();<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>    configurationManager.notifyAllObservers(conf);<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>  }<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span><a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>    long evictedBlocks = 0;<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span><a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    for(Store store : region.getStores()) {<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>      }<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    }<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span><a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>    return CacheEvictionStats.builder()<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>        .build();<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>  }<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span><a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>  @Override<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>  public double getCompactionPressure() {<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>    double max = 0;<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>    for (Region region : onlineRegions.values()) {<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>      for (Store store : region.getStores()) {<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        double normCount = store.getCompactionPressure();<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>        if (normCount &gt; max) {<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span>          max = normCount;<a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>        }<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      }<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>    return max;<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>  }<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span><a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>  @Override<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>    return hMemManager;<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>  }<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span><a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    return cacheFlusher;<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  /**<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>   * For testing<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>   */<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>  @VisibleForTesting<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>  public boolean walRollRequestFinished() {<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>    return this.walRoller.walRollFinished();<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>  }<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span><a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>  @Override<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>  public ThroughputController getFlushThroughputController() {<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>    return flushThroughputController;<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span><a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>  @Override<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  public double getFlushPressure() {<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>      // return 0 during RS initialization<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      return 0.0;<a name="line.3711"></a>
 <span class="sourceLineNo">3712</span>    }<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>  }<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span><a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>  @Override<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>  public MetricsRegionServer getMetrics() {<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>    return metricsRegionServer;<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>  }<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span><a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>  @Override<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>    return this.secureBulkLoadManager;<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>  }<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span><a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>  @Override<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      final Abortable abort) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>    final LockServiceClient client =<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>  }<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span><a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>  @Override<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>  }<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span><a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>  @Override<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>    return this.rsSpaceQuotaManager;<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>  }<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span><a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>  @Override<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>      // the current server could be stopping.<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>      return false;<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>    }<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>    try {<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>      rss.reportFileArchival(null, request);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>    } catch (ServiceException se) {<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>        if (LOG.isTraceEnabled()) {<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>              + " This will be retried.", ioe);<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>        }<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>        return false;<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>      }<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>      if (rssStub == rss) {<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>        rssStub = null;<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>      }<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>      // re-create the stub if we failed to report the archival<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>      createRegionServerStatusStub(true);<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>      return false;<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>    }<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>    return true;<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>  }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>    return eventLoopGroupConfig;<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>  }<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span><a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>  @Override<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>  }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span><a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>  }<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span><a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>    procedureResultReporter.complete(procId, error);<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>  }<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span><a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>    for (;;) {<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>      rss = rssStub;<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>      if (rss != null) {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>        break;<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>      }<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>      createRegionServerStatusStub();<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>    }<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>    try {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>      rss.reportProcedureDone(null, request);<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>    } catch (ServiceException se) {<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>      if (rssStub == rss) {<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>        rssStub = null;<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>      }<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>    }<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>  }<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span><a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>  /**<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>   *<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>   *<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>   *<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>   * See HBASE-22404 for more details.<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>   *<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>   * @param procId the id of the open/close region procedure<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>   * @return true if the procedure can be submitted.<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>   */<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>  boolean submitRegionProcedure(long procId) {<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>    if (procId == -1) {<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      return true;<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>    }<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>    // Ignore the region procedures which already submitted.<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>    if (previous != null) {<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>      return false;<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>    }<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>    // Ignore the region procedures which already executed.<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>      return false;<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>    }<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>    return true;<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>  }<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span><a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>  /**<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>   * @param procId the id of the open/close region procedure<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>   */<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span>  public void finishRegionProcedure(long procId) {<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>    executedRegionProcedures.put(procId, procId);<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>    submittedRegionProcedures.remove(procId);<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>  }<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span><a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>  public boolean isShutDown() {<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>    return shutDown;<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>  }<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span><a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>  /**<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>   * Force to terminate region server when abort timeout.<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>   */<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span><a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>    public SystemExitWhenAbortTimeout() {<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>    }<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span><a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>    @Override<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>    public void run() {<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>          " Thread dump to stdout.");<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>      Runtime.getRuntime().halt(1);<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>    }<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>  }<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span><a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>  @Override<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>    return asyncClusterConnection;<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>  }<a name="line.3885"></a>
+<span class="sourceLineNo">3713</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  }<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span><a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    ThroughputController old = this.flushThroughputController;<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>    if (old != null) {<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>      old.stop("configuration change");<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>    }<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    try {<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>      Superusers.initialize(newConf);<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    } catch (IOException e) {<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    }<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>  }<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span><a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>  @Override<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>  public MetricsRegionServer getMetrics() {<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span>    return metricsRegionServer;<a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>  }<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span><a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>  @Override<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>    return this.secureBulkLoadManager;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>  }<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span><a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>  @Override<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>      final Abortable abort) {<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>    final LockServiceClient client =<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>  }<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span><a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>  @Override<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>  }<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span><a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>  @Override<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>    return this.rsSpaceQuotaManager;<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>  }<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span><a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>  @Override<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>      // the current server could be stopping.<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>      return false;<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>    }<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>    try {<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>      rss.reportFileArchival(null, request);<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>    } catch (ServiceException se) {<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        if (LOG.isTraceEnabled()) {<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>              + " This will be retried.", ioe);<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>        }<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>        return false;<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>      if (rssStub == rss) {<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>        rssStub = null;<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      }<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>      // re-create the stub if we failed to report the archival<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>      createRegionServerStatusStub(true);<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>      return false;<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    }<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>    return true;<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span><a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>    return eventLoopGroupConfig;<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>  }<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span><a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  @Override<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>  }<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span><a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>  }<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span><a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>    procedureResultReporter.complete(procId, error);<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>  }<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span><a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>    for (;;) {<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>      rss = rssStub;<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      if (rss != null) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>        break;<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>      }<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>      createRegionServerStatusStub();<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>    }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span>    try {<a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>      rss.reportProcedureDone(null, request);<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>    } catch (ServiceException se) {<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>      if (rssStub == rss) {<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>        rssStub = null;<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span>      }<a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>    }<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>  }<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span><a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>  /**<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>   *<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>   *<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>   *<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>   * See HBASE-22404 for more details.<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>   *<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>   * @param procId the id of the open/close region procedure<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>   * @return true if the procedure can be submitted.<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>   */<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>  boolean submitRegionProcedure(long procId) {<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>    if (procId == -1) {<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>      return true;<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>    }<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>    // Ignore the region procedures which already submitted.<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>    if (previous != null) {<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span>      return false;<a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>    }<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>    // Ignore the region procedures which already executed.<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>      return false;<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span>    }<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>    return true;<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>  }<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span><a name="line.3865"></a>
+<span class="sourceLineNo">3866</span>  /**<a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>   * @param procId the id of the open/close region procedure<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>   */<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>  public void finishRegionProcedure(long procId) {<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>    executedRegionProcedures.put(procId, procId);<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span>    submittedRegionProcedures.remove(procId);<a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>  }<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span><a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>  public boolean isShutDown() {<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>    return shutDown;<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  }<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span><a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  /**<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span>   * Force to terminate region server when abort timeout.<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>   */<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span><a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>    public SystemExitWhenAbortTimeout() {<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>    }<a name="line.3885"></a>
 <span class="sourceLineNo">3886</span><a name="line.3886"></a>
-<span class="sourceLineNo">3887</span>  @VisibleForTesting<a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>    return compactedFileDischarger;<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>  }<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>}<a name="line.3891"></a>
+<span class="sourceLineNo">3887</span>    @Override<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span>    public void run() {<a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>          " Thread dump to stdout.");<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>      Runtime.getRuntime().halt(1);<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>    }<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>  }<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span><a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>  @Override<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span>    return asyncClusterConnection;<a name="line.3899"></a>
+<span class="sourceLineNo">3900</span>  }<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span><a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>  @VisibleForTesting<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>    return compactedFileDischarger;<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>  }<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>}<a name="line.3906"></a>
 
 
 
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 b694c3c..7f9cc0d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegionServer.html
@@ -309,3594 +309,3609 @@
 <span class="sourceLineNo">301</span>  // Replication services. If no replication, this handler will be null.<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  private ReplicationSourceService replicationSourceHandler;<a name="line.302"></a>
 <span class="sourceLineNo">303</span>  private ReplicationSinkService replicationSinkHandler;<a name="line.303"></a>
-<span class="sourceLineNo">304</span><a name="line.304"></a>
-<span class="sourceLineNo">305</span>  // Compactions<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.309"></a>
-<span class="sourceLineNo">310</span>   * encoded region name.  All access should be synchronized.<a name="line.310"></a>
-<span class="sourceLineNo">311</span>   */<a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.312"></a>
-<span class="sourceLineNo">313</span>  /**<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.314"></a>
-<span class="sourceLineNo">315</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.315"></a>
-<span class="sourceLineNo">316</span>   */<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<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>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.322"></a>
-<span class="sourceLineNo">323</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.323"></a>
-<span class="sourceLineNo">324</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.324"></a>
-<span class="sourceLineNo">325</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * and here we really mean DataNode locations.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   */<a name="line.327"></a>
-<span class="sourceLineNo">328</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>  private LeaseManager leaseManager;<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  // Instance of the hbase executor executorService.<a name="line.332"></a>
-<span class="sourceLineNo">333</span>  protected ExecutorService executorService;<a name="line.333"></a>
-<span class="sourceLineNo">334</span><a name="line.334"></a>
-<span class="sourceLineNo">335</span>  private volatile boolean dataFsOk;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private HFileSystem dataFs;<a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private HFileSystem walFs;<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  // Set when a report to the master comes back with a message asking us to<a name="line.339"></a>
-<span class="sourceLineNo">340</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.340"></a>
-<span class="sourceLineNo">341</span>  // of HRegionServer in isolation.<a name="line.341"></a>
-<span class="sourceLineNo">342</span>  private volatile boolean stopped = false;<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.344"></a>
-<span class="sourceLineNo">345</span>  // debugging and unit tests.<a name="line.345"></a>
-<span class="sourceLineNo">346</span>  private AtomicBoolean abortRequested;<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  // Default abort timeout is 1200 seconds for safe<a name="line.348"></a>
-<span class="sourceLineNo">349</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  // Will run this task when abort timeout<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.351"></a>
-<span class="sourceLineNo">352</span><a name="line.352"></a>
-<span class="sourceLineNo">353</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.353"></a>
-<span class="sourceLineNo">354</span>  // space regions.<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  private boolean stopping = false;<a name="line.355"></a>
-<span class="sourceLineNo">356</span>  private volatile boolean killed = false;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private volatile boolean shutDown = false;<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>  protected final Configuration conf;<a name="line.359"></a>
-<span class="sourceLineNo">360</span><a name="line.360"></a>
-<span class="sourceLineNo">361</span>  private Path dataRootDir;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>  private Path walRootDir;<a name="line.362"></a>
-<span class="sourceLineNo">363</span><a name="line.363"></a>
-<span class="sourceLineNo">364</span>  private final int threadWakeFrequency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>  final int msgInterval;<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.367"></a>
-<span class="sourceLineNo">368</span>  private final int compactionCheckFrequency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  private final int flushCheckFrequency;<a name="line.370"></a>
-<span class="sourceLineNo">371</span><a name="line.371"></a>
-<span class="sourceLineNo">372</span>  // Stub to do region server status calls against the master.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.373"></a>
-<span class="sourceLineNo">374</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.374"></a>
-<span class="sourceLineNo">375</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private RpcClient rpcClient;<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.380"></a>
-<span class="sourceLineNo">381</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.381"></a>
-<span class="sourceLineNo">382</span>  // into web context.<a name="line.382"></a>
-<span class="sourceLineNo">383</span>  protected InfoServer infoServer;<a name="line.383"></a>
-<span class="sourceLineNo">384</span>  private JvmPauseMonitor pauseMonitor;<a name="line.384"></a>
-<span class="sourceLineNo">385</span><a name="line.385"></a>
-<span class="sourceLineNo">386</span>  /** region server process name */<a name="line.386"></a>
-<span class="sourceLineNo">387</span>  public static final String REGIONSERVER = "regionserver";<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
+<span class="sourceLineNo">304</span>  private boolean sameReplicationSourceAndSink;<a name="line.304"></a>
+<span class="sourceLineNo">305</span><a name="line.305"></a>
+<span class="sourceLineNo">306</span>  // Compactions<a name="line.306"></a>
+<span class="sourceLineNo">307</span>  public CompactSplit compactSplitThread;<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>   * Map of regions currently being served by this region server. Key is the<a name="line.310"></a>
+<span class="sourceLineNo">311</span>   * encoded region name.  All access should be synchronized.<a name="line.311"></a>
+<span class="sourceLineNo">312</span>   */<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  private final Map&lt;String, HRegion&gt; onlineRegions = new ConcurrentHashMap&lt;&gt;();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>  /**<a name="line.314"></a>
+<span class="sourceLineNo">315</span>   * Lock for gating access to {@link #onlineRegions}.<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * TODO: If this map is gated by a lock, does it need to be a ConcurrentHashMap?<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   */<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  private final ReentrantReadWriteLock onlineRegionsLock = new ReentrantReadWriteLock();<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Map of encoded region names to the DataNode locations they should be hosted on<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * We store the value as InetSocketAddress since this is used only in HDFS<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * API (create() that takes favored nodes as hints for placing file blocks).<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * We could have used ServerName here as the value class, but we'd need to<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * convert it to InetSocketAddress at some point before the HDFS API call, and<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   * it seems a bit weird to store ServerName since ServerName refers to RegionServers<a name="line.326"></a>
+<span class="sourceLineNo">327</span>   * and here we really mean DataNode locations.<a name="line.327"></a>
+<span class="sourceLineNo">328</span>   */<a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private final Map&lt;String, InetSocketAddress[]&gt; regionFavoredNodesMap = new ConcurrentHashMap&lt;&gt;();<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>  private LeaseManager leaseManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  // Instance of the hbase executor executorService.<a name="line.333"></a>
+<span class="sourceLineNo">334</span>  protected ExecutorService executorService;<a name="line.334"></a>
+<span class="sourceLineNo">335</span><a name="line.335"></a>
+<span class="sourceLineNo">336</span>  private volatile boolean dataFsOk;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  private HFileSystem dataFs;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  private HFileSystem walFs;<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  // Set when a report to the master comes back with a message asking us to<a name="line.340"></a>
+<span class="sourceLineNo">341</span>  // shutdown. Also set by call to stop when debugging or running unit tests<a name="line.341"></a>
+<span class="sourceLineNo">342</span>  // of HRegionServer in isolation.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>  private volatile boolean stopped = false;<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>  // Go down hard. Used if file system becomes unavailable and also in<a name="line.345"></a>
+<span class="sourceLineNo">346</span>  // debugging and unit tests.<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  private AtomicBoolean abortRequested;<a name="line.347"></a>
+<span class="sourceLineNo">348</span>  static final String ABORT_TIMEOUT = "hbase.regionserver.abort.timeout";<a name="line.348"></a>
+<span class="sourceLineNo">349</span>  // Default abort timeout is 1200 seconds for safe<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  private static final long DEFAULT_ABORT_TIMEOUT = 1200000;<a name="line.350"></a>
+<span class="sourceLineNo">351</span>  // Will run this task when abort timeout<a name="line.351"></a>
+<span class="sourceLineNo">352</span>  static final String ABORT_TIMEOUT_TASK = "hbase.regionserver.abort.timeout.task";<a name="line.352"></a>
+<span class="sourceLineNo">353</span><a name="line.353"></a>
+<span class="sourceLineNo">354</span>  // A state before we go into stopped state.  At this stage we're closing user<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  // space regions.<a name="line.355"></a>
+<span class="sourceLineNo">356</span>  private boolean stopping = false;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  private volatile boolean killed = false;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>  private volatile boolean shutDown = false;<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>  protected final Configuration conf;<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  private Path dataRootDir;<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  private Path walRootDir;<a name="line.363"></a>
+<span class="sourceLineNo">364</span><a name="line.364"></a>
+<span class="sourceLineNo">365</span>  private final int threadWakeFrequency;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>  final int msgInterval;<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>  private static final String PERIOD_COMPACTION = "hbase.regionserver.compaction.check.period";<a name="line.368"></a>
+<span class="sourceLineNo">369</span>  private final int compactionCheckFrequency;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  private static final String PERIOD_FLUSH = "hbase.regionserver.flush.check.period";<a name="line.370"></a>
+<span class="sourceLineNo">371</span>  private final int flushCheckFrequency;<a name="line.371"></a>
+<span class="sourceLineNo">372</span><a name="line.372"></a>
+<span class="sourceLineNo">373</span>  // Stub to do region server status calls against the master.<a name="line.373"></a>
+<span class="sourceLineNo">374</span>  private volatile RegionServerStatusService.BlockingInterface rssStub;<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  private volatile LockService.BlockingInterface lockStub;<a name="line.375"></a>
+<span class="sourceLineNo">376</span>  // RPC client. Used to make the stub above that does region server status checking.<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private RpcClient rpcClient;<a name="line.377"></a>
+<span class="sourceLineNo">378</span><a name="line.378"></a>
+<span class="sourceLineNo">379</span>  private UncaughtExceptionHandler uncaughtExceptionHandler;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>  // Info server. Default access so can be used by unit tests. REGIONSERVER<a name="line.381"></a>
+<span class="sourceLineNo">382</span>  // is name of the webapp and the attribute name used stuffing this instance<a name="line.382"></a>
+<span class="sourceLineNo">383</span>  // into web context.<a name="line.383"></a>
+<span class="sourceLineNo">384</span>  protected InfoServer infoServer;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>  private JvmPauseMonitor pauseMonitor;<a name="line.385"></a>
+<span class="sourceLineNo">386</span><a name="line.386"></a>
+<span class="sourceLineNo">387</span>  /** region server process name */<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  public static final String REGIONSERVER = "regionserver";<a name="line.388"></a>
 <span class="sourceLineNo">389</span><a name="line.389"></a>
-<span class="sourceLineNo">390</span>  private MetricsRegionServer metricsRegionServer;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.395"></a>
-<span class="sourceLineNo">396</span>   */<a name="line.396"></a>
-<span class="sourceLineNo">397</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   */<a name="line.401"></a>
-<span class="sourceLineNo">402</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.405"></a>
-<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
-<span class="sourceLineNo">407</span>  private ScheduledChore periodicFlusher;<a name="line.407"></a>
-<span class="sourceLineNo">408</span><a name="line.408"></a>
-<span class="sourceLineNo">409</span>  private volatile WALFactory walFactory;<a name="line.409"></a>
-<span class="sourceLineNo">410</span><a name="line.410"></a>
-<span class="sourceLineNo">411</span>  private LogRoller walRoller;<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  // A thread which calls reportProcedureDone<a name="line.413"></a>
-<span class="sourceLineNo">414</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>  // flag set after we're done setting up server threads<a name="line.416"></a>
-<span class="sourceLineNo">417</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.417"></a>
-<span class="sourceLineNo">418</span><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  // zookeeper connection and watcher<a name="line.419"></a>
-<span class="sourceLineNo">420</span>  protected final ZKWatcher zooKeeper;<a name="line.420"></a>
-<span class="sourceLineNo">421</span><a name="line.421"></a>
-<span class="sourceLineNo">422</span>  // master address tracker<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.423"></a>
-<span class="sourceLineNo">424</span><a name="line.424"></a>
-<span class="sourceLineNo">425</span>  // Cluster Status Tracker<a name="line.425"></a>
-<span class="sourceLineNo">426</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.426"></a>
-<span class="sourceLineNo">427</span><a name="line.427"></a>
-<span class="sourceLineNo">428</span>  // Log Splitting Worker<a name="line.428"></a>
-<span class="sourceLineNo">429</span>  private SplitLogWorker splitLogWorker;<a name="line.429"></a>
-<span class="sourceLineNo">430</span><a name="line.430"></a>
-<span class="sourceLineNo">431</span>  // A sleeper that sleeps for msgInterval.<a name="line.431"></a>
-<span class="sourceLineNo">432</span>  protected final Sleeper sleeper;<a name="line.432"></a>
-<span class="sourceLineNo">433</span><a name="line.433"></a>
-<span class="sourceLineNo">434</span>  private final int shortOperationTimeout;<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.436"></a>
-<span class="sourceLineNo">437</span><a name="line.437"></a>
-<span class="sourceLineNo">438</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.438"></a>
-<span class="sourceLineNo">439</span><a name="line.439"></a>
-<span class="sourceLineNo">440</span>  // Block cache<a name="line.440"></a>
-<span class="sourceLineNo">441</span>  private BlockCache blockCache;<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  // The cache for mob files<a name="line.442"></a>
-<span class="sourceLineNo">443</span>  private MobFileCache mobFileCache;<a name="line.443"></a>
-<span class="sourceLineNo">444</span><a name="line.444"></a>
-<span class="sourceLineNo">445</span>  /** The health check chore. */<a name="line.445"></a>
-<span class="sourceLineNo">446</span>  private HealthCheckChore healthCheckChore;<a name="line.446"></a>
-<span class="sourceLineNo">447</span><a name="line.447"></a>
-<span class="sourceLineNo">448</span>  /** The Executor status collect chore. */<a name="line.448"></a>
-<span class="sourceLineNo">449</span>  private ExecutorStatusChore executorStatusChore;<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>  /** The nonce manager chore. */<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  private ScheduledChore nonceManagerChore;<a name="line.452"></a>
-<span class="sourceLineNo">453</span><a name="line.453"></a>
-<span class="sourceLineNo">454</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.454"></a>
-<span class="sourceLineNo">455</span><a name="line.455"></a>
-<span class="sourceLineNo">456</span>  /**<a name="line.456"></a>
-<span class="sourceLineNo">457</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.457"></a>
-<span class="sourceLineNo">458</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.458"></a>
-<span class="sourceLineNo">459</span>   * against Master.<a name="line.459"></a>
-<span class="sourceLineNo">460</span>   */<a name="line.460"></a>
-<span class="sourceLineNo">461</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.464"></a>
-<span class="sourceLineNo">465</span>   */<a name="line.465"></a>
-<span class="sourceLineNo">466</span>  protected String useThisHostnameInstead;<a name="line.466"></a>
-<span class="sourceLineNo">467</span><a name="line.467"></a>
-<span class="sourceLineNo">468</span>  /**<a name="line.468"></a>
-<span class="sourceLineNo">469</span>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.469"></a>
-<span class="sourceLineNo">470</span>   * Exception will be thrown if both are used.<a name="line.470"></a>
-<span class="sourceLineNo">471</span>   */<a name="line.471"></a>
-<span class="sourceLineNo">472</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.472"></a>
-<span class="sourceLineNo">473</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.477"></a>
-<span class="sourceLineNo">478</span>   */<a name="line.478"></a>
-<span class="sourceLineNo">479</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.482"></a>
-<span class="sourceLineNo">483</span>   */<a name="line.483"></a>
-<span class="sourceLineNo">484</span>  protected String clusterId;<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>  // chore for refreshing store files for secondary regions<a name="line.486"></a>
-<span class="sourceLineNo">487</span>  private StorefileRefresherChore storefileRefresher;<a name="line.487"></a>
-<span class="sourceLineNo">488</span><a name="line.488"></a>
-<span class="sourceLineNo">489</span>  private RegionServerCoprocessorHost rsHost;<a name="line.489"></a>
-<span class="sourceLineNo">490</span><a name="line.490"></a>
-<span class="sourceLineNo">491</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.491"></a>
-<span class="sourceLineNo">492</span><a name="line.492"></a>
-<span class="sourceLineNo">493</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.493"></a>
-<span class="sourceLineNo">494</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.494"></a>
-<span class="sourceLineNo">495</span><a name="line.495"></a>
-<span class="sourceLineNo">496</span>  /**<a name="line.496"></a>
-<span class="sourceLineNo">497</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.497"></a>
-<span class="sourceLineNo">498</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.498"></a>
-<span class="sourceLineNo">499</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.499"></a>
-<span class="sourceLineNo">500</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.500"></a>
-<span class="sourceLineNo">501</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.501"></a>
-<span class="sourceLineNo">502</span>   * HBASE-3787) are:<a name="line.502"></a>
-<span class="sourceLineNo">503</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.503"></a>
-<span class="sourceLineNo">504</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.504"></a>
-<span class="sourceLineNo">505</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.505"></a>
-<span class="sourceLineNo">506</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.506"></a>
-<span class="sourceLineNo">507</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.509"></a>
-<span class="sourceLineNo">510</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.510"></a>
-<span class="sourceLineNo">511</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.511"></a>
-<span class="sourceLineNo">512</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.512"></a>
-<span class="sourceLineNo">513</span>   */<a name="line.513"></a>
-<span class="sourceLineNo">514</span>  final ServerNonceManager nonceManager;<a name="line.514"></a>
-<span class="sourceLineNo">515</span><a name="line.515"></a>
-<span class="sourceLineNo">516</span>  private UserProvider userProvider;<a name="line.516"></a>
-<span class="sourceLineNo">517</span><a name="line.517"></a>
-<span class="sourceLineNo">518</span>  protected final RSRpcServices rpcServices;<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
-<span class="sourceLineNo">520</span>  private CoordinatedStateManager csm;<a name="line.520"></a>
-<span class="sourceLineNo">521</span><a name="line.521"></a>
-<span class="sourceLineNo">522</span>  /**<a name="line.522"></a>
-<span class="sourceLineNo">523</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.523"></a>
-<span class="sourceLineNo">524</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.524"></a>
-<span class="sourceLineNo">525</span>   */<a name="line.525"></a>
-<span class="sourceLineNo">526</span>  protected final ConfigurationManager configurationManager;<a name="line.526"></a>
-<span class="sourceLineNo">527</span><a name="line.527"></a>
-<span class="sourceLineNo">528</span>  @VisibleForTesting<a name="line.528"></a>
-<span class="sourceLineNo">529</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.529"></a>
-<span class="sourceLineNo">530</span><a name="line.530"></a>
-<span class="sourceLineNo">531</span>  private volatile ThroughputController flushThroughputController;<a name="line.531"></a>
-<span class="sourceLineNo">532</span><a name="line.532"></a>
-<span class="sourceLineNo">533</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.533"></a>
-<span class="sourceLineNo">534</span><a name="line.534"></a>
-<span class="sourceLineNo">535</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.535"></a>
-<span class="sourceLineNo">536</span><a name="line.536"></a>
-<span class="sourceLineNo">537</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  /**<a name="line.539"></a>
-<span class="sourceLineNo">540</span>   * Provide online slow log responses from ringbuffer<a name="line.540"></a>
-<span class="sourceLineNo">541</span>   */<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  private NamedQueueRecorder namedQueueRecorder = null;<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  /**<a name="line.544"></a>
-<span class="sourceLineNo">545</span>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.546"></a>
-<span class="sourceLineNo">547</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.547"></a>
-<span class="sourceLineNo">548</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.548"></a>
-<span class="sourceLineNo">549</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.549"></a>
-<span class="sourceLineNo">550</span>   */<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  private final boolean masterless;<a name="line.551"></a>
-<span class="sourceLineNo">552</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.552"></a>
-<span class="sourceLineNo">553</span><a name="line.553"></a>
-<span class="sourceLineNo">554</span>  /**regionserver codec list **/<a name="line.554"></a>
-<span class="sourceLineNo">555</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.555"></a>
-<span class="sourceLineNo">556</span><a name="line.556"></a>
-<span class="sourceLineNo">557</span>  // A timer to shutdown the process if abort takes too long<a name="line.557"></a>
-<span class="sourceLineNo">558</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.561"></a>
-<span class="sourceLineNo">562</span>   * &lt;p/&gt;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>   * Don't start any services or managers in here in the Constructor.<a name="line.563"></a>
-<span class="sourceLineNo">564</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.564"></a>
-<span class="sourceLineNo">565</span>   */<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>    super("RegionServer");  // thread name<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    TraceUtil.initTracer(conf);<a name="line.568"></a>
-<span class="sourceLineNo">569</span>    try {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>      this.startcode = System.currentTimeMillis();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>      this.conf = conf;<a name="line.571"></a>
-<span class="sourceLineNo">572</span>      this.dataFsOk = true;<a name="line.572"></a>
-<span class="sourceLineNo">573</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.573"></a>
-<span class="sourceLineNo">574</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.574"></a>
-<span class="sourceLineNo">575</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>      HFile.checkHFileVersion(this.conf);<a name="line.576"></a>
-<span class="sourceLineNo">577</span>      checkCodecs(this.conf);<a name="line.577"></a>
-<span class="sourceLineNo">578</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.578"></a>
-<span class="sourceLineNo">579</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>      // Disable usage of meta replicas in the regionserver<a name="line.581"></a>
-<span class="sourceLineNo">582</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.582"></a>
-<span class="sourceLineNo">583</span>      // Config'ed params<a name="line.583"></a>
-<span class="sourceLineNo">584</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.587"></a>
-<span class="sourceLineNo">588</span><a name="line.588"></a>
-<span class="sourceLineNo">589</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.591"></a>
-<span class="sourceLineNo">592</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.592"></a>
-<span class="sourceLineNo">593</span><a name="line.593"></a>
-<span class="sourceLineNo">594</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.594"></a>
-<span class="sourceLineNo">595</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.597"></a>
-<span class="sourceLineNo">598</span>      this.stopped = false;<a name="line.598"></a>
-<span class="sourceLineNo">599</span><a name="line.599"></a>
-<span class="sourceLineNo">600</span>      initNamedQueueRecorder(conf);<a name="line.600"></a>
-<span class="sourceLineNo">601</span>      rpcServices = createRpcServices();<a name="line.601"></a>
-<span class="sourceLineNo">602</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>      String hostName =<a name="line.603"></a>
-<span class="sourceLineNo">604</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.604"></a>
-<span class="sourceLineNo">605</span>              : this.useThisHostnameInstead;<a name="line.605"></a>
-<span class="sourceLineNo">606</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.606"></a>
-<span class="sourceLineNo">607</span><a name="line.607"></a>
-<span class="sourceLineNo">608</span>      // login the zookeeper client principal (if using security)<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.609"></a>
-<span class="sourceLineNo">610</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.610"></a>
-<span class="sourceLineNo">611</span>      // login the server principal (if using secure Hadoop)<a name="line.611"></a>
-<span class="sourceLineNo">612</span>      login(userProvider, hostName);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>      // init superusers and add the server principal (if using security)<a name="line.613"></a>
-<span class="sourceLineNo">614</span>      // or process owner as default super user.<a name="line.614"></a>
-<span class="sourceLineNo">615</span>      Superusers.initialize(conf);<a name="line.615"></a>
-<span class="sourceLineNo">616</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.616"></a>
-<span class="sourceLineNo">617</span><a name="line.617"></a>
-<span class="sourceLineNo">618</span>      boolean isMasterNotCarryTable =<a name="line.618"></a>
-<span class="sourceLineNo">619</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.619"></a>
-<span class="sourceLineNo">620</span><a name="line.620"></a>
-<span class="sourceLineNo">621</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.621"></a>
-<span class="sourceLineNo">622</span>      if (!isMasterNotCarryTable) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.623"></a>
-<span class="sourceLineNo">624</span>        mobFileCache = new MobFileCache(conf);<a name="line.624"></a>
-<span class="sourceLineNo">625</span>      }<a name="line.625"></a>
-<span class="sourceLineNo">626</span><a name="line.626"></a>
-<span class="sourceLineNo">627</span>      uncaughtExceptionHandler =<a name="line.627"></a>
-<span class="sourceLineNo">628</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.628"></a>
-<span class="sourceLineNo">629</span><a name="line.629"></a>
-<span class="sourceLineNo">630</span>      initializeFileSystem();<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.631"></a>
-<span class="sourceLineNo">632</span><a name="line.632"></a>
-<span class="sourceLineNo">633</span>      this.configurationManager = new ConfigurationManager();<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.634"></a>
-<span class="sourceLineNo">635</span><a name="line.635"></a>
-<span class="sourceLineNo">636</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.636"></a>
-<span class="sourceLineNo">637</span>      // Open connection to zookeeper and set primary watcher<a name="line.637"></a>
-<span class="sourceLineNo">638</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        canCreateBaseZNode());<a name="line.639"></a>
-<span class="sourceLineNo">640</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      if (!this.masterless) {<a name="line.641"></a>
-<span class="sourceLineNo">642</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>          this.csm = new ZkCoordinatedStateManager(this);<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>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.647"></a>
-<span class="sourceLineNo">648</span>        masterAddressTracker.start();<a name="line.648"></a>
-<span class="sourceLineNo">649</span><a name="line.649"></a>
-<span class="sourceLineNo">650</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        clusterStatusTracker.start();<a name="line.651"></a>
-<span class="sourceLineNo">652</span>      } else {<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        masterAddressTracker = null;<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        clusterStatusTracker = null;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      this.rpcServices.start(zooKeeper);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.658"></a>
-<span class="sourceLineNo">659</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.659"></a>
-<span class="sourceLineNo">660</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      // class HRS. TODO.<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      this.choreService = new ChoreService(getName(), true);<a name="line.662"></a>
-<span class="sourceLineNo">663</span>      this.executorService = new ExecutorService(getName());<a name="line.663"></a>
-<span class="sourceLineNo">664</span>      putUpWebUI();<a name="line.664"></a>
-<span class="sourceLineNo">665</span>    } catch (Throwable t) {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // cause of failed startup is lost.<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      LOG.error("Failed construction RegionServer", t);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      throw t;<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>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.673"></a>
-<span class="sourceLineNo">674</span>    if (!(this instanceof HMaster)) {<a name="line.674"></a>
-<span class="sourceLineNo">675</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.675"></a>
-<span class="sourceLineNo">676</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.676"></a>
-<span class="sourceLineNo">677</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      if (isOnlineLogProviderEnabled) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.679"></a>
-<span class="sourceLineNo">680</span>      }<a name="line.680"></a>
-<span class="sourceLineNo">681</span>    } else {<a name="line.681"></a>
-<span class="sourceLineNo">682</span>      final boolean isBalancerDecisionRecording = conf<a name="line.682"></a>
-<span class="sourceLineNo">683</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.683"></a>
-<span class="sourceLineNo">684</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      if (isBalancerDecisionRecording) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.686"></a>
-<span class="sourceLineNo">687</span>      }<a name="line.687"></a>
-<span class="sourceLineNo">688</span>    }<a name="line.688"></a>
-<span class="sourceLineNo">689</span>  }<a name="line.689"></a>
-<span class="sourceLineNo">690</span><a name="line.690"></a>
-<span class="sourceLineNo">691</span>  // HMaster should override this method to load the specific config for master<a name="line.691"></a>
-<span class="sourceLineNo">692</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.692"></a>
-<span class="sourceLineNo">693</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.693"></a>
-<span class="sourceLineNo">694</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.696"></a>
-<span class="sourceLineNo">697</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.697"></a>
-<span class="sourceLineNo">698</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.698"></a>
-<span class="sourceLineNo">699</span>        throw new IOException(msg);<a name="line.699"></a>
-<span class="sourceLineNo">700</span>      } else {<a name="line.700"></a>
-<span class="sourceLineNo">701</span>        return rpcServices.isa.getHostName();<a name="line.701"></a>
-<span class="sourceLineNo">702</span>      }<a name="line.702"></a>
-<span class="sourceLineNo">703</span>    } else {<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      return hostname;<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">709</span>   * If running on Windows, do windows-specific setup.<a name="line.709"></a>
-<span class="sourceLineNo">710</span>   */<a name="line.710"></a>
-<span class="sourceLineNo">711</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.711"></a>
-<span class="sourceLineNo">712</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>        conf.reloadConfiguration();<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        cm.notifyAllObservers(conf);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>      });<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>  }<a name="line.718"></a>
-<span class="sourceLineNo">719</span><a name="line.719"></a>
-<span class="sourceLineNo">720</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    NettyEventLoopGroupConfig nelgc =<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    return nelgc;<a name="line.726"></a>
-<span class="sourceLineNo">727</span>  }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>  private void initializeFileSystem() throws IOException {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.735"></a>
-<span class="sourceLineNo">736</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    // (unless all is set to defaults).<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.739"></a>
-<span class="sourceLineNo">740</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.740"></a>
-<span class="sourceLineNo">741</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.742"></a>
-<span class="sourceLineNo">743</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<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>  protected void login(UserProvider user, String host) throws IOException {<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.747"></a>
-<span class="sourceLineNo">748</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Wait for an active Master.<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   * See override in Master superclass for how it is used.<a name="line.753"></a>
-<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
-<span class="sourceLineNo">755</span>  protected void waitForMasterActive() {}<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>  protected String getProcessName() {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    return REGIONSERVER;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>  }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>  protected boolean canCreateBaseZNode() {<a name="line.761"></a>
-<span class="sourceLineNo">762</span>    return this.masterless;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>  }<a name="line.763"></a>
-<span class="sourceLineNo">764</span><a name="line.764"></a>
-<span class="sourceLineNo">765</span>  protected boolean canUpdateTableDescriptor() {<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    return false;<a name="line.770"></a>
-<span class="sourceLineNo">771</span>  }<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    return new RSRpcServices(this);<a name="line.774"></a>
-<span class="sourceLineNo">775</span>  }<a name="line.775"></a>
-<span class="sourceLineNo">776</span><a name="line.776"></a>
-<span class="sourceLineNo">777</span>  protected void configureInfoServer() {<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.778"></a>
-<span class="sourceLineNo">779</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>    return RSDumpServlet.class;<a name="line.783"></a>
-<span class="sourceLineNo">784</span>  }<a name="line.784"></a>
-<span class="sourceLineNo">785</span><a name="line.785"></a>
-<span class="sourceLineNo">786</span>  @Override<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  public boolean registerService(Service instance) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>    // No stacking of instances is allowed for a single executorService name<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.791"></a>
-<span class="sourceLineNo">792</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        " already registered, rejecting request from " + instance);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>      return false;<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>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.797"></a>
-<span class="sourceLineNo">798</span>    if (LOG.isDebugEnabled()) {<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      LOG.debug(<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.800"></a>
-<span class="sourceLineNo">801</span>    }<a name="line.801"></a>
-<span class="sourceLineNo">802</span>    return true;<a name="line.802"></a>
-<span class="sourceLineNo">803</span>  }<a name="line.803"></a>
-<span class="sourceLineNo">804</span><a name="line.804"></a>
-<span class="sourceLineNo">805</span>  private Configuration cleanupConfiguration() {<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    Configuration conf = this.conf;<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.808"></a>
-<span class="sourceLineNo">809</span>    //   masters' availability.<a name="line.809"></a>
-<span class="sourceLineNo">810</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.810"></a>
-<span class="sourceLineNo">811</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    //   other internal connections too.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.815"></a>
-<span class="sourceLineNo">816</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.817"></a>
-<span class="sourceLineNo">818</span>      // the conf and unset the client ZK related properties<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      conf = new Configuration(this.conf);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    return conf;<a name="line.822"></a>
-<span class="sourceLineNo">823</span>  }<a name="line.823"></a>
-<span class="sourceLineNo">824</span><a name="line.824"></a>
-<span class="sourceLineNo">825</span>  /**<a name="line.825"></a>
-<span class="sourceLineNo">826</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.826"></a>
-<span class="sourceLineNo">827</span>   */<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    // check to see if the codec list is available:<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.830"></a>
-<span class="sourceLineNo">831</span>    if (codecs == null) return;<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    for (String codec : codecs) {<a name="line.832"></a>
-<span class="sourceLineNo">833</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>        throw new IOException("Compression codec " + codec +<a name="line.834"></a>
-<span class="sourceLineNo">835</span>          " not supported, aborting RS construction");<a name="line.835"></a>
-<span class="sourceLineNo">836</span>      }<a name="line.836"></a>
-<span class="sourceLineNo">837</span>    }<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  }<a name="line.838"></a>
-<span class="sourceLineNo">839</span><a name="line.839"></a>
-<span class="sourceLineNo">840</span>  public String getClusterId() {<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    return this.clusterId;<a name="line.841"></a>
-<span class="sourceLineNo">842</span>  }<a name="line.842"></a>
-<span class="sourceLineNo">843</span><a name="line.843"></a>
-<span class="sourceLineNo">844</span>  /**<a name="line.844"></a>
-<span class="sourceLineNo">845</span>   * Setup our cluster connection if not already initialized.<a name="line.845"></a>
-<span class="sourceLineNo">846</span>   */<a name="line.846"></a>
-<span class="sourceLineNo">847</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.847"></a>
-<span class="sourceLineNo">848</span>    if (asyncClusterConnection == null) {<a name="line.848"></a>
-<span class="sourceLineNo">849</span>      Configuration conf = cleanupConfiguration();<a name="line.849"></a>
-<span class="sourceLineNo">850</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.850"></a>
-<span class="sourceLineNo">851</span>      User user = userProvider.getCurrent();<a name="line.851"></a>
-<span class="sourceLineNo">852</span>      asyncClusterConnection =<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.853"></a>
-<span class="sourceLineNo">854</span>    }<a name="line.854"></a>
-<span class="sourceLineNo">855</span>  }<a name="line.855"></a>
-<span class="sourceLineNo">856</span><a name="line.856"></a>
-<span class="sourceLineNo">857</span>  /**<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   */<a name="line.861"></a>
-<span class="sourceLineNo">862</span>  private void preRegistrationInitialization() {<a name="line.862"></a>
-<span class="sourceLineNo">863</span>    try {<a name="line.863"></a>
-<span class="sourceLineNo">864</span>      initializeZooKeeper();<a name="line.864"></a>
-<span class="sourceLineNo">865</span>      setupClusterConnection();<a name="line.865"></a>
-<span class="sourceLineNo">866</span>      // Setup RPC client for master communication<a name="line.866"></a>
-<span class="sourceLineNo">867</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.867"></a>
-<span class="sourceLineNo">868</span>    } catch (Throwable t) {<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      // Call stop if error or process will stick around for ever since server<a name="line.869"></a>
-<span class="sourceLineNo">870</span>      // puts up non-daemon threads.<a name="line.870"></a>
-<span class="sourceLineNo">871</span>      this.rpcServices.stop();<a name="line.871"></a>
-<span class="sourceLineNo">872</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    }<a name="line.873"></a>
-<span class="sourceLineNo">874</span>  }<a name="line.874"></a>
-<span class="sourceLineNo">875</span><a name="line.875"></a>
-<span class="sourceLineNo">876</span>  /**<a name="line.876"></a>
-<span class="sourceLineNo">877</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.877"></a>
-<span class="sourceLineNo">878</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.878"></a>
-<span class="sourceLineNo">879</span>   * &lt;p&gt;<a name="line.879"></a>
-<span class="sourceLineNo">880</span>   * Finally open long-living server short-circuit connection.<a name="line.880"></a>
-<span class="sourceLineNo">881</span>   */<a name="line.881"></a>
-<span class="sourceLineNo">882</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    justification="cluster Id znode read would give us correct response")<a name="line.883"></a>
-<span class="sourceLineNo">884</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.884"></a>
-<span class="sourceLineNo">885</span>    // Nothing to do in here if no Master in the mix.<a name="line.885"></a>
-<span class="sourceLineNo">886</span>    if (this.masterless) {<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      return;<a name="line.887"></a>
-<span class="sourceLineNo">888</span>    }<a name="line.888"></a>
-<span class="sourceLineNo">889</span><a name="line.889"></a>
-<span class="sourceLineNo">890</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.890"></a>
-<span class="sourceLineNo">891</span>    // block until a master is available.  No point in starting up if no master<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    // running.<a name="line.892"></a>
-<span class="sourceLineNo">893</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.893"></a>
-<span class="sourceLineNo">894</span><a name="line.894"></a>
-<span class="sourceLineNo">895</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.895"></a>
-<span class="sourceLineNo">896</span>    // when ready.<a name="line.896"></a>
-<span class="sourceLineNo">897</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.897"></a>
-<span class="sourceLineNo">898</span><a name="line.898"></a>
-<span class="sourceLineNo">899</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.899"></a>
-<span class="sourceLineNo">900</span>    if (clusterId == null) {<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      // Retrieve clusterId<a name="line.901"></a>
-<span class="sourceLineNo">902</span>      // Since cluster status is now up<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      // ID should have already been set by HMaster<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      try {<a name="line.904"></a>
-<span class="sourceLineNo">905</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.905"></a>
-<span class="sourceLineNo">906</span>        if (clusterId == null) {<a name="line.906"></a>
-<span class="sourceLineNo">907</span>          this.abort("Cluster ID has not been set");<a name="line.907"></a>
-<span class="sourceLineNo">908</span>        }<a name="line.908"></a>
-<span class="sourceLineNo">909</span>        LOG.info("ClusterId : " + clusterId);<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      } catch (KeeperException e) {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.911"></a>
-<span class="sourceLineNo">912</span>      }<a name="line.912"></a>
-<span class="sourceLineNo">913</span>    }<a name="line.913"></a>
-<span class="sourceLineNo">914</span><a name="line.914"></a>
-<span class="sourceLineNo">915</span>    waitForMasterActive();<a name="line.915"></a>
-<span class="sourceLineNo">916</span>    if (isStopped() || isAborted()) {<a name="line.916"></a>
-<span class="sourceLineNo">917</span>      return; // No need for further initialization<a name="line.917"></a>
-<span class="sourceLineNo">918</span>    }<a name="line.918"></a>
-<span class="sourceLineNo">919</span><a name="line.919"></a>
-<span class="sourceLineNo">920</span>    // watch for snapshots and other procedures<a name="line.920"></a>
-<span class="sourceLineNo">921</span>    try {<a name="line.921"></a>
-<span class="sourceLineNo">922</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      rspmHost.loadProcedures(conf);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      rspmHost.initialize(this);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>    } catch (KeeperException e) {<a name="line.925"></a>
-<span class="sourceLineNo">926</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<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><a name="line.929"></a>
-<span class="sourceLineNo">930</span>  /**<a name="line.930"></a>
-<span class="sourceLineNo">931</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.931"></a>
-<span class="sourceLineNo">932</span>   * if the region server is shut down<a name="line.932"></a>
-<span class="sourceLineNo">933</span>   * @param tracker znode tracker to use<a name="line.933"></a>
-<span class="sourceLineNo">934</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.934"></a>
-<span class="sourceLineNo">935</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.935"></a>
-<span class="sourceLineNo">936</span>   */<a name="line.936"></a>
-<span class="sourceLineNo">937</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.937"></a>
-<span class="sourceLineNo">938</span>      throws IOException, InterruptedException {<a name="line.938"></a>
-<span class="sourceLineNo">939</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      if (this.stopped) {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      }<a name="line.942"></a>
-<span class="sourceLineNo">943</span>    }<a name="line.943"></a>
-<span class="sourceLineNo">944</span>  }<a name="line.944"></a>
-<span class="sourceLineNo">945</span><a name="line.945"></a>
-<span class="sourceLineNo">946</span>  /**<a name="line.946"></a>
-<span class="sourceLineNo">947</span>   * @return True if the cluster is up.<a name="line.947"></a>
-<span class="sourceLineNo">948</span>   */<a name="line.948"></a>
-<span class="sourceLineNo">949</span>  @Override<a name="line.949"></a>
-<span class="sourceLineNo">950</span>  public boolean isClusterUp() {<a name="line.950"></a>
-<span class="sourceLineNo">951</span>    return this.masterless ||<a name="line.951"></a>
-<span class="sourceLineNo">952</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.952"></a>
-<span class="sourceLineNo">953</span>  }<a name="line.953"></a>
-<span class="sourceLineNo">954</span><a name="line.954"></a>
-<span class="sourceLineNo">955</span>  /**<a name="line.955"></a>
-<span class="sourceLineNo">956</span>   * The HRegionServer sticks in this loop until closed.<a name="line.956"></a>
-<span class="sourceLineNo">957</span>   */<a name="line.957"></a>
-<span class="sourceLineNo">958</span>  @Override<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  public void run() {<a name="line.959"></a>
-<span class="sourceLineNo">960</span>    if (isStopped()) {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>      LOG.info("Skipping run; stopped");<a name="line.961"></a>
-<span class="sourceLineNo">962</span>      return;<a name="line.962"></a>
-<span class="sourceLineNo">963</span>    }<a name="line.963"></a>
-<span class="sourceLineNo">964</span>    try {<a name="line.964"></a>
-<span class="sourceLineNo">965</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.965"></a>
-<span class="sourceLineNo">966</span>      preRegistrationInitialization();<a name="line.966"></a>
-<span class="sourceLineNo">967</span>    } catch (Throwable e) {<a name="line.967"></a>
-<span class="sourceLineNo">968</span>      abort("Fatal exception during initialization", e);<a name="line.968"></a>
-<span class="sourceLineNo">969</span>    }<a name="line.969"></a>
-<span class="sourceLineNo">970</span><a name="line.970"></a>
-<span class="sourceLineNo">971</span>    try {<a name="line.971"></a>
-<span class="sourceLineNo">972</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.972"></a>
-<span class="sourceLineNo">973</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.973"></a>
-<span class="sourceLineNo">974</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.974"></a>
-<span class="sourceLineNo">975</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.975"></a>
-<span class="sourceLineNo">976</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.976"></a>
-<span class="sourceLineNo">977</span><a name="line.977"></a>
-<span class="sourceLineNo">978</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.978"></a>
-<span class="sourceLineNo">979</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.979"></a>
-<span class="sourceLineNo">980</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.980"></a>
-<span class="sourceLineNo">981</span>        // come up.<a name="line.981"></a>
-<span class="sourceLineNo">982</span>        LOG.debug("About to register with Master.");<a name="line.982"></a>
-<span class="sourceLineNo">983</span>        RetryCounterFactory rcf =<a name="line.983"></a>
-<span class="sourceLineNo">984</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.984"></a>
-<span class="sourceLineNo">985</span>        RetryCounter rc = rcf.create();<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        while (keepLooping()) {<a name="line.986"></a>
-<span class="sourceLineNo">987</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.987"></a>
-<span class="sourceLineNo">988</span>          if (w == null) {<a name="line.988"></a>
-<span class="sourceLineNo">989</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.989"></a>
-<span class="sourceLineNo">990</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.990"></a>
-<span class="sourceLineNo">991</span>            this.sleeper.sleep(sleepTime);<a name="line.991"></a>
-<span class="sourceLineNo">992</span>          } else {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>            handleReportForDutyResponse(w);<a name="line.993"></a>
-<span class="sourceLineNo">994</span>            break;<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          }<a name="line.995"></a>
-<span class="sourceLineNo">996</span>        }<a name="line.996"></a>
-<span class="sourceLineNo">997</span>      }<a name="line.997"></a>
-<span class="sourceLineNo">998</span><a name="line.998"></a>
-<span class="sourceLineNo">999</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>        // start the snapshot handler and other procedure handlers,<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>        // since the server is ready to run<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>        if (this.rspmHost != null) {<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          this.rspmHost.start();<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>        }<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>        // Start the Quota Manager<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>        if (this.rsQuotaManager != null) {<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        }<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>          this.rsSpaceQuotaManager.start();<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>        }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>      }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span><a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>      // We registered with the Master.  Go into run mode.<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>      long lastMsg = System.currentTimeMillis();<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>      long oldRequestCount = -1;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>      // The main run loop.<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        if (!isClusterUp()) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>          if (onlineRegions.isEmpty()) {<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>          } else if (!this.stopping) {<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>            this.stopping = true;<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>            LOG.info("Closing user regions");<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>            closeUserRegions(this.abortRequested.get());<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>          } else {<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>            if (allUserRegionsOffline) {<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>              // Set stopped if no more write requests tp meta tables<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>              // since last time we went around the loop.  Any open<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>              // meta regions will be closed on our way out.<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>                break;<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>              }<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>              oldRequestCount = getWriteRequestCount();<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>            } else {<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>              // Make sure all regions have been closed -- some regions may<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>              // have not got it because we were splitting at the time of<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>              // the call to closeUserRegions.<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>              closeUserRegions(this.abortRequested.get());<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>            }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>          }<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>        }<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>        long now = System.currentTimeMillis();<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>          tryRegionServerReport(lastMsg, now);<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>          lastMsg = System.currentTimeMillis();<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>        }<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>          this.sleeper.sleep();<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>        }<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      } // for<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    } catch (Throwable t) {<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>        abort(prefix + t.getMessage(), t);<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>      }<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    }<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span><a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>    if (this.leaseManager != null) {<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    }<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    if (this.splitLogWorker != null) {<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>      splitLogWorker.stop();<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    }<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>    if (this.infoServer != null) {<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>      LOG.info("Stopping infoServer");<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>      try {<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>        this.infoServer.stop();<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>      } catch (Exception e) {<a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>      }<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    }<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // Send cache a shutdown.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    if (blockCache != null) {<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>      blockCache.shutdown();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    }<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    if (mobFileCache != null) {<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>      mobFileCache.shutdown();<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    }<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span><a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span><a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (rspmHost != null) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>    }<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span><a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    if (this.killed) {<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    } else if (abortRequested.get()) {<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>      if (this.dataFsOk) {<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      }<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      LOG.info("aborting server " + this.serverName);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    } else {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      closeUserRegions(abortRequested.get());<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>      LOG.info("stopping server " + this.serverName);<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span><a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    if (this.asyncClusterConnection != null) {<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>      try {<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>        this.asyncClusterConnection.close();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>      } catch (IOException e) {<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>      }<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    }<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        if (this.compactSplitThread != null) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>          this.compactSplitThread.join();<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>          this.compactSplitThread = null;<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>      }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>    }<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span><a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>    }<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span><a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    // Stop the quota manager<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    if (rsQuotaManager != null) {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>      rsQuotaManager.stop();<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>    }<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    if (rsSpaceQuotaManager != null) {<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>      rsSpaceQuotaManager.stop();<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager = null;<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    }<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span><a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>    // flag may be changed when closing regions throws exception.<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>    if (this.dataFsOk) {<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      shutdownWAL(!abortRequested.get());<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>    }<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span><a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    // Make sure the proxy is down.<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>    if (this.rssStub != null) {<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>      this.rssStub = null;<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>    }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    if (this.lockStub != null) {<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>      this.lockStub = null;<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>    }<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>    if (this.rpcClient != null) {<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>      this.rpcClient.close();<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    }<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>    if (this.leaseManager != null) {<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>      this.leaseManager.close();<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    }<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    if (this.pauseMonitor != null) {<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>      this.pauseMonitor.stop();<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span><a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    if (!killed) {<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>      stopServiceThreads();<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    }<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span><a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    if (this.rpcServices != null) {<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      this.rpcServices.stop();<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    try {<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>      deleteMyEphemeralNode();<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>      // pass<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>    } catch (KeeperException e) {<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    }<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span><a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    if (this.zooKeeper != null) {<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>      this.zooKeeper.close();<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>    }<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    this.shutDown = true;<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>  }<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>  private boolean containsMetaTableRegions() {<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>  }<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span><a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>  private boolean areAllUserRegionsOffline() {<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    boolean allUserRegionsOffline = true;<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>        allUserRegionsOffline = false;<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>        break;<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>      }<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>    }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span>    return allUserRegionsOffline;<a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  }<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span><a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>  /**<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>   * @return Current write count for all online regions.<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>   */<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span>  private long getWriteRequestCount() {<a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>    long writeCount = 0;<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>    }<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>    return writeCount;<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span>  }<a name="line.1214"></a>
-<span class="sourceLineNo">1215</span><a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>  @VisibleForTesting<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>      throws IOException {<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>      return;<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>    }<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>    try {<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>      request.setLoad(sl);<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>      rss.regionServerReport(null, request.build());<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>    } catch (ServiceException se) {<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>        // This will be caught and handled as a fatal error in run()<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>        throw ioe;<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>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>      // Method blocks until new master is found or we are stopped<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>      createRegionServerStatusStub(true);<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>    }<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>  }<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span><a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>  /**<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span>   *<a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>   * @param regionSizeStore The store containing region sizes<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>   */<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>    if (rss == null) {<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>      // the current server could be stopping.<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>      return true;<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>    }<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>    try {<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>    } catch (ServiceException se) {<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span>            + " This will be retried.", ioe);<a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span>        return true;<a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>      }<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>      if (rssStub == rss) {<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>        rssStub = null;<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>      }<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>      createRegionServerStatusStub(true);<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>            return false;<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>          }<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>        }<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>      }<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>    }<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>    return true;<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>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>   *<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>   * @param rss The stub to send to the Master<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>   * @param regionSizeStore The store containing region sizes<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>   */<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>    RegionSpaceUseReportRequest request =<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    // Record the number of size reports sent<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>    if (metricsRegionServer != null) {<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>    }<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>  }<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span><a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>  /**<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>   *<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>   * @param regionSizes The size in bytes of regions<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>   * @return The corresponding protocol buffer message.<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>   */<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1314"></a>
-<span class="sourceLineNo">1315</span>    }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    return request.build();<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>  }<a name="line.1317"></a>
-<span class="sourceLineNo">1318</span><a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  /**<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>   * protobuf message.<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   *<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   * @param regionInfo The RegionInfo<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span>   * @return The protocol buffer<a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>   */<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>    return RegionSpaceUse.newBuilder()<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>        .build();<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>  }<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span><a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>      throws IOException {<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1337"></a>
-<span class="sourceLineNo">1338</span>    // the wrapper to compute those numbers in one place.<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    // history.<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    long usedMemory = -1L;<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    long maxMemory = -1L;<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span>    if (usage != null) {<a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>      usedMemory = usage.getUsed();<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>      maxMemory = usage.getMax();<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    }<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span><a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1358"></a>
-<span class="sourceLineNo">1359</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>    for (String coprocessor : coprocessors) {<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>    }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    for (HRegion region : regions) {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      if (region.getCoprocessorHost() != null) {<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>          .getCoprocessors()) {<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      }<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>    if (this.infoServer != null) {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>    } else {<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      serverLoad.setInfoServerPort(-1);<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>    }<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>    MetricsUserAggregateSource userSource =<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>    if (userSource != null) {<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      }<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    }<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>    // for the replicationLoad purpose. Only need to get from one executorService<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>    // either source or sink will get the same info<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span>    ReplicationSourceService rsources = getReplicationSourceService();<a name="line.1395"></a>
-<span class="sourceLineNo">1396</span><a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>    if (rsources != null) {<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>      // always refresh first to get the latest value<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      ReplicationLoad rLoad = rsources.refreshAndGetReplicationLoad();<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>      if (rLoad != null) {<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1401"></a>
-<span class="sourceLineNo">1402</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS :<a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>            rLoad.getReplicationLoadSourceEntries()) {<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span>          serverLoad.addReplLoadSource(rLS);<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>    }<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span><a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>    return serverLoad.build();<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>  }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span><a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>    StringBuilder sb = new StringBuilder();<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>    }<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    return sb.toString();<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span>  }<a name="line.1420"></a>
-<span class="sourceLineNo">1421</span><a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>  /**<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>   * Wait on regions close.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>   */<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    // Wait till all regions are closed before going out.<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>    int lastCount = -1;<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>    long previousLogTime = 0;<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>    boolean interrupted = false;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>    try {<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      while (!onlineRegions.isEmpty()) {<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>        int count = getNumberOfOnlineRegions();<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>        // Only print a message if the count of regions has changed.<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>        if (count != lastCount) {<a name="line.1435"></a>
-<span class="sourceLineNo">1436</span>          // Log every second at most<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>            previousLogTime = System.currentTimeMillis();<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>            lastCount = count;<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>            // Only print out regions still closing if a small number else will<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>            // swamp the log.<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>            }<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>          }<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        }<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        // protect against the case where an open comes in after we start the<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        // iterator of onlineRegions to close all user regions.<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>            closedRegions.add(hri.getEncodedName());<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>            // Don't update zk with this close transition; pass false.<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span>          }<a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>        }<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>        // No regions in RIT, we could stop waiting now.<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>          if (!onlineRegions.isEmpty()) {<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>                " because some regions failed closing");<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>          }<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>          break;<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>        } else {<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>        }<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>        if (sleepInterrupted(200)) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>          interrupted = true;<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        }<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>      }<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>    } finally {<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>      if (interrupted) {<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        Thread.currentThread().interrupt();<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>    }<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>  }<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span><a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>    boolean interrupted = false;<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>    try {<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      Thread.sleep(millis);<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>    } catch (InterruptedException e) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>      LOG.warn("Interrupted while sleeping");<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>      interrupted = true;<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>    }<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>    return interrupted;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>  }<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span><a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>  private void shutdownWAL(final boolean close) {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>    if (this.walFactory != null) {<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>      try {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>        if (close) {<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>          walFactory.close();<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>        } else {<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>          walFactory.shutdown();<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>        }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>      } catch (Throwable e) {<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      }<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>    }<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>  }<a name="line.1507"></a>
-<span class="sourceLineNo">1508</span><a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>  /**<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>   *<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>   * @return NamedQueueRecorder<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>   */<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1514"></a>
-<span class="sourceLineNo">1515</span>    return this.namedQueueRecorder;<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>  /*<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>   *<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>   * @param c Extra configuration.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>   */<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>  throws IOException {<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>    try {<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>      boolean updateRootDir = false;<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>        String key = e.getName();<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>        // The hostname the master sees us as.<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span>              this.startcode);<a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>            LOG.error(msg);<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>            throw new IOException(msg);<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>          }<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>            LOG.error(msg);<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>          }<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>          continue;<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>        }<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span><a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>        String value = e.getValue();<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            updateRootDir = true;<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>
-<span class="sourceLineNo">1556</span><a name="line.1556"></a>
-<span class="sourceLineNo">1557</span>        if (LOG.isDebugEnabled()) {<a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>        }<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>        this.conf.set(key, value);<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>      }<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>      createMyEphemeralNode();<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (updateRootDir) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        initializeFileSystem();<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>      }<a name="line.1568"></a>
+<span class="sourceLineNo">390</span><a name="line.390"></a>
+<span class="sourceLineNo">391</span>  private MetricsRegionServer metricsRegionServer;<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  MetricsRegionServerWrapperImpl metricsRegionServerImpl;<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private SpanReceiverHost spanReceiverHost;<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>   * ChoreService used to schedule tasks that we want to run periodically<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  private ChoreService choreService;<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>   * Check for compactions requests.<a name="line.401"></a>
+<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
+<span class="sourceLineNo">403</span>  private ScheduledChore compactionChecker;<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>   * Check for flushes<a name="line.406"></a>
+<span class="sourceLineNo">407</span>   */<a name="line.407"></a>
+<span class="sourceLineNo">408</span>  private ScheduledChore periodicFlusher;<a name="line.408"></a>
+<span class="sourceLineNo">409</span><a name="line.409"></a>
+<span class="sourceLineNo">410</span>  private volatile WALFactory walFactory;<a name="line.410"></a>
+<span class="sourceLineNo">411</span><a name="line.411"></a>
+<span class="sourceLineNo">412</span>  private LogRoller walRoller;<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  // A thread which calls reportProcedureDone<a name="line.414"></a>
+<span class="sourceLineNo">415</span>  private RemoteProcedureResultReporter procedureResultReporter;<a name="line.415"></a>
+<span class="sourceLineNo">416</span><a name="line.416"></a>
+<span class="sourceLineNo">417</span>  // flag set after we're done setting up server threads<a name="line.417"></a>
+<span class="sourceLineNo">418</span>  final AtomicBoolean online = new AtomicBoolean(false);<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>  // zookeeper connection and watcher<a name="line.420"></a>
+<span class="sourceLineNo">421</span>  protected final ZKWatcher zooKeeper;<a name="line.421"></a>
+<span class="sourceLineNo">422</span><a name="line.422"></a>
+<span class="sourceLineNo">423</span>  // master address tracker<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  private final MasterAddressTracker masterAddressTracker;<a name="line.424"></a>
+<span class="sourceLineNo">425</span><a name="line.425"></a>
+<span class="sourceLineNo">426</span>  // Cluster Status Tracker<a name="line.426"></a>
+<span class="sourceLineNo">427</span>  protected final ClusterStatusTracker clusterStatusTracker;<a name="line.427"></a>
+<span class="sourceLineNo">428</span><a name="line.428"></a>
+<span class="sourceLineNo">429</span>  // Log Splitting Worker<a name="line.429"></a>
+<span class="sourceLineNo">430</span>  private SplitLogWorker splitLogWorker;<a name="line.430"></a>
+<span class="sourceLineNo">431</span><a name="line.431"></a>
+<span class="sourceLineNo">432</span>  // A sleeper that sleeps for msgInterval.<a name="line.432"></a>
+<span class="sourceLineNo">433</span>  protected final Sleeper sleeper;<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>  private final int shortOperationTimeout;<a name="line.435"></a>
+<span class="sourceLineNo">436</span><a name="line.436"></a>
+<span class="sourceLineNo">437</span>  private final RegionServerAccounting regionServerAccounting;<a name="line.437"></a>
+<span class="sourceLineNo">438</span><a name="line.438"></a>
+<span class="sourceLineNo">439</span>  private SlowLogTableOpsChore slowLogTableOpsChore = null;<a name="line.439"></a>
+<span class="sourceLineNo">440</span><a name="line.440"></a>
+<span class="sourceLineNo">441</span>  // Block cache<a name="line.441"></a>
+<span class="sourceLineNo">442</span>  private BlockCache blockCache;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>  // The cache for mob files<a name="line.443"></a>
+<span class="sourceLineNo">444</span>  private MobFileCache mobFileCache;<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>  /** The health check chore. */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  private HealthCheckChore healthCheckChore;<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>  /** The Executor status collect chore. */<a name="line.449"></a>
+<span class="sourceLineNo">450</span>  private ExecutorStatusChore executorStatusChore;<a name="line.450"></a>
+<span class="sourceLineNo">451</span><a name="line.451"></a>
+<span class="sourceLineNo">452</span>  /** The nonce manager chore. */<a name="line.452"></a>
+<span class="sourceLineNo">453</span>  private ScheduledChore nonceManagerChore;<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>  private Map&lt;String, Service&gt; coprocessorServiceHandlers = Maps.newHashMap();<a name="line.455"></a>
+<span class="sourceLineNo">456</span><a name="line.456"></a>
+<span class="sourceLineNo">457</span>  /**<a name="line.457"></a>
+<span class="sourceLineNo">458</span>   * The server name the Master sees us as.  Its made from the hostname the<a name="line.458"></a>
+<span class="sourceLineNo">459</span>   * master passes us, port, and server startcode. Gets set after registration<a name="line.459"></a>
+<span class="sourceLineNo">460</span>   * against Master.<a name="line.460"></a>
+<span class="sourceLineNo">461</span>   */<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  protected ServerName serverName;<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>   * hostname specified by hostname config<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  protected String useThisHostnameInstead;<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>   * HBASE-18226: This config and hbase.regionserver.hostname are mutually exclusive.<a name="line.470"></a>
+<span class="sourceLineNo">471</span>   * Exception will be thrown if both are used.<a name="line.471"></a>
+<span class="sourceLineNo">472</span>   */<a name="line.472"></a>
+<span class="sourceLineNo">473</span>  @InterfaceAudience.LimitedPrivate(HBaseInterfaceAudience.CONFIG)<a name="line.473"></a>
+<span class="sourceLineNo">474</span>  final static String RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY =<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    "hbase.regionserver.hostname.disable.master.reversedns";<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>   * This servers startcode.<a name="line.478"></a>
+<span class="sourceLineNo">479</span>   */<a name="line.479"></a>
+<span class="sourceLineNo">480</span>  protected final long startcode;<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>   * Unique identifier for the cluster we are a part of.<a name="line.483"></a>
+<span class="sourceLineNo">484</span>   */<a name="line.484"></a>
+<span class="sourceLineNo">485</span>  protected String clusterId;<a name="line.485"></a>
+<span class="sourceLineNo">486</span><a name="line.486"></a>
+<span class="sourceLineNo">487</span>  // chore for refreshing store files for secondary regions<a name="line.487"></a>
+<span class="sourceLineNo">488</span>  private StorefileRefresherChore storefileRefresher;<a name="line.488"></a>
+<span class="sourceLineNo">489</span><a name="line.489"></a>
+<span class="sourceLineNo">490</span>  private RegionServerCoprocessorHost rsHost;<a name="line.490"></a>
+<span class="sourceLineNo">491</span><a name="line.491"></a>
+<span class="sourceLineNo">492</span>  private RegionServerProcedureManagerHost rspmHost;<a name="line.492"></a>
+<span class="sourceLineNo">493</span><a name="line.493"></a>
+<span class="sourceLineNo">494</span>  private RegionServerRpcQuotaManager rsQuotaManager;<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  private RegionServerSpaceQuotaManager rsSpaceQuotaManager;<a name="line.495"></a>
+<span class="sourceLineNo">496</span><a name="line.496"></a>
+<span class="sourceLineNo">497</span>  /**<a name="line.497"></a>
+<span class="sourceLineNo">498</span>   * Nonce manager. Nonces are used to make operations like increment and append idempotent<a name="line.498"></a>
+<span class="sourceLineNo">499</span>   * in the case where client doesn't receive the response from a successful operation and<a name="line.499"></a>
+<span class="sourceLineNo">500</span>   * retries. We track the successful ops for some time via a nonce sent by client and handle<a name="line.500"></a>
+<span class="sourceLineNo">501</span>   * duplicate operations (currently, by failing them; in future we might use MVCC to return<a name="line.501"></a>
+<span class="sourceLineNo">502</span>   * result). Nonces are also recovered from WAL during, recovery; however, the caveats (from<a name="line.502"></a>
+<span class="sourceLineNo">503</span>   * HBASE-3787) are:<a name="line.503"></a>
+<span class="sourceLineNo">504</span>   * - WAL recovery is optimized, and under high load we won't read nearly nonce-timeout worth<a name="line.504"></a>
+<span class="sourceLineNo">505</span>   *   of past records. If we don't read the records, we don't read and recover the nonces.<a name="line.505"></a>
+<span class="sourceLineNo">506</span>   *   Some WALs within nonce-timeout at recovery may not even be present due to rolling/cleanup.<a name="line.506"></a>
+<span class="sourceLineNo">507</span>   * - There's no WAL recovery during normal region move, so nonces will not be transfered.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>   * We can have separate additional "Nonce WAL". It will just contain bunch of numbers and<a name="line.508"></a>
+<span class="sourceLineNo">509</span>   * won't be flushed on main path - because WAL itself also contains nonces, if we only flush<a name="line.509"></a>
+<span class="sourceLineNo">510</span>   * it before memstore flush, for a given nonce we will either see it in the WAL (if it was<a name="line.510"></a>
+<span class="sourceLineNo">511</span>   * never flushed to disk, it will be part of recovery), or we'll see it as part of the nonce<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * log (or both occasionally, which doesn't matter). Nonce log file can be deleted after the<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   * latest nonce in it expired. It can also be recovered during move.<a name="line.513"></a>
+<span class="sourceLineNo">514</span>   */<a name="line.514"></a>
+<span class="sourceLineNo">515</span>  final ServerNonceManager nonceManager;<a name="line.515"></a>
+<span class="sourceLineNo">516</span><a name="line.516"></a>
+<span class="sourceLineNo">517</span>  private UserProvider userProvider;<a name="line.517"></a>
+<span class="sourceLineNo">518</span><a name="line.518"></a>
+<span class="sourceLineNo">519</span>  protected final RSRpcServices rpcServices;<a name="line.519"></a>
+<span class="sourceLineNo">520</span><a name="line.520"></a>
+<span class="sourceLineNo">521</span>  private CoordinatedStateManager csm;<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>  /**<a name="line.523"></a>
+<span class="sourceLineNo">524</span>   * Configuration manager is used to register/deregister and notify the configuration observers<a name="line.524"></a>
+<span class="sourceLineNo">525</span>   * when the regionserver is notified that there was a change in the on disk configs.<a name="line.525"></a>
+<span class="sourceLineNo">526</span>   */<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  protected final ConfigurationManager configurationManager;<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  @VisibleForTesting<a name="line.529"></a>
+<span class="sourceLineNo">530</span>  CompactedHFilesDischarger compactedFileDischarger;<a name="line.530"></a>
+<span class="sourceLineNo">531</span><a name="line.531"></a>
+<span class="sourceLineNo">532</span>  private volatile ThroughputController flushThroughputController;<a name="line.532"></a>
+<span class="sourceLineNo">533</span><a name="line.533"></a>
+<span class="sourceLineNo">534</span>  private SecureBulkLoadManager secureBulkLoadManager;<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>  private FileSystemUtilizationChore fsUtilizationChore;<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>  private final NettyEventLoopGroupConfig eventLoopGroupConfig;<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>   * Provide online slow log responses from ringbuffer<a name="line.541"></a>
+<span class="sourceLineNo">542</span>   */<a name="line.542"></a>
+<span class="sourceLineNo">543</span>  private NamedQueueRecorder namedQueueRecorder = 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>   * True if this RegionServer is coming up in a cluster where there is no Master;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>   * means it needs to just come up and make do without a Master to talk to: e.g. in test or<a name="line.547"></a>
+<span class="sourceLineNo">548</span>   * HRegionServer is doing other than its usual duties: e.g. as an hollowed-out host whose only<a name="line.548"></a>
+<span class="sourceLineNo">549</span>   * purpose is as a Replication-stream sink; see HBASE-18846 for more.<a name="line.549"></a>
+<span class="sourceLineNo">550</span>   * TODO: can this replace {@link #TEST_SKIP_REPORTING_TRANSITION} ?<a name="line.550"></a>
+<span class="sourceLineNo">551</span>   */<a name="line.551"></a>
+<span class="sourceLineNo">552</span>  private final boolean masterless;<a name="line.552"></a>
+<span class="sourceLineNo">553</span>  private static final String MASTERLESS_CONFIG_NAME = "hbase.masterless";<a name="line.553"></a>
+<span class="sourceLineNo">554</span><a name="line.554"></a>
+<span class="sourceLineNo">555</span>  /**regionserver codec list **/<a name="line.555"></a>
+<span class="sourceLineNo">556</span>  private static final String REGIONSERVER_CODEC = "hbase.regionserver.codecs";<a name="line.556"></a>
+<span class="sourceLineNo">557</span><a name="line.557"></a>
+<span class="sourceLineNo">558</span>  // A timer to shutdown the process if abort takes too long<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private Timer abortMonitor;<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>   * Starts a HRegionServer at the default location.<a name="line.562"></a>
+<span class="sourceLineNo">563</span>   * &lt;p/&gt;<a name="line.563"></a>
+<span class="sourceLineNo">564</span>   * Don't start any services or managers in here in the Constructor.<a name="line.564"></a>
+<span class="sourceLineNo">565</span>   * Defer till after we register with the Master as much as possible. See {@link #startServices}.<a name="line.565"></a>
+<span class="sourceLineNo">566</span>   */<a name="line.566"></a>
+<span class="sourceLineNo">567</span>  public HRegionServer(final Configuration conf) throws IOException {<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    super("RegionServer");  // thread name<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    TraceUtil.initTracer(conf);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>    try {<a name="line.570"></a>
+<span class="sourceLineNo">571</span>      this.startcode = System.currentTimeMillis();<a name="line.571"></a>
+<span class="sourceLineNo">572</span>      this.conf = conf;<a name="line.572"></a>
+<span class="sourceLineNo">573</span>      this.dataFsOk = true;<a name="line.573"></a>
+<span class="sourceLineNo">574</span>      this.masterless = conf.getBoolean(MASTERLESS_CONFIG_NAME, false);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>      this.eventLoopGroupConfig = setupNetty(this.conf);<a name="line.575"></a>
+<span class="sourceLineNo">576</span>      MemorySizeUtil.checkForClusterFreeHeapMemoryLimit(this.conf);<a name="line.576"></a>
+<span class="sourceLineNo">577</span>      HFile.checkHFileVersion(this.conf);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>      checkCodecs(this.conf);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>      this.userProvider = UserProvider.instantiate(conf);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>      FSUtils.setupShortCircuitRead(this.conf);<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>      // Disable usage of meta replicas in the regionserver<a name="line.582"></a>
+<span class="sourceLineNo">583</span>      this.conf.setBoolean(HConstants.USE_META_REPLICAS, false);<a name="line.583"></a>
+<span class="sourceLineNo">584</span>      // Config'ed params<a name="line.584"></a>
+<span class="sourceLineNo">585</span>      this.threadWakeFrequency = conf.getInt(HConstants.THREAD_WAKE_FREQUENCY, 10 * 1000);<a name="line.585"></a>
+<span class="sourceLineNo">586</span>      this.compactionCheckFrequency = conf.getInt(PERIOD_COMPACTION, this.threadWakeFrequency);<a name="line.586"></a>
+<span class="sourceLineNo">587</span>      this.flushCheckFrequency = conf.getInt(PERIOD_FLUSH, this.threadWakeFrequency);<a name="line.587"></a>
+<span class="sourceLineNo">588</span>      this.msgInterval = conf.getInt("hbase.regionserver.msginterval", 3 * 1000);<a name="line.588"></a>
+<span class="sourceLineNo">589</span><a name="line.589"></a>
+<span class="sourceLineNo">590</span>      this.sleeper = new Sleeper(this.msgInterval, this);<a name="line.590"></a>
+<span class="sourceLineNo">591</span><a name="line.591"></a>
+<span class="sourceLineNo">592</span>      boolean isNoncesEnabled = conf.getBoolean(HConstants.HBASE_RS_NONCES_ENABLED, true);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>      this.nonceManager = isNoncesEnabled ? new ServerNonceManager(this.conf) : null;<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>      this.shortOperationTimeout = conf.getInt(HConstants.HBASE_RPC_SHORTOPERATION_TIMEOUT_KEY,<a name="line.595"></a>
+<span class="sourceLineNo">596</span>          HConstants.DEFAULT_HBASE_RPC_SHORTOPERATION_TIMEOUT);<a name="line.596"></a>
+<span class="sourceLineNo">597</span><a name="line.597"></a>
+<span class="sourceLineNo">598</span>      this.abortRequested = new AtomicBoolean(false);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      this.stopped = false;<a name="line.599"></a>
+<span class="sourceLineNo">600</span><a name="line.600"></a>
+<span class="sourceLineNo">601</span>      initNamedQueueRecorder(conf);<a name="line.601"></a>
+<span class="sourceLineNo">602</span>      rpcServices = createRpcServices();<a name="line.602"></a>
+<span class="sourceLineNo">603</span>      useThisHostnameInstead = getUseThisHostnameInstead(conf);<a name="line.603"></a>
+<span class="sourceLineNo">604</span>      String hostName =<a name="line.604"></a>
+<span class="sourceLineNo">605</span>          StringUtils.isBlank(useThisHostnameInstead) ? this.rpcServices.isa.getHostName()<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              : this.useThisHostnameInstead;<a name="line.606"></a>
+<span class="sourceLineNo">607</span>      serverName = ServerName.valueOf(hostName, this.rpcServices.isa.getPort(), this.startcode);<a name="line.607"></a>
+<span class="sourceLineNo">608</span><a name="line.608"></a>
+<span class="sourceLineNo">609</span>      // login the zookeeper client principal (if using security)<a name="line.609"></a>
+<span class="sourceLineNo">610</span>      ZKUtil.loginClient(this.conf, HConstants.ZK_CLIENT_KEYTAB_FILE,<a name="line.610"></a>
+<span class="sourceLineNo">611</span>          HConstants.ZK_CLIENT_KERBEROS_PRINCIPAL, hostName);<a name="line.611"></a>
+<span class="sourceLineNo">612</span>      // login the server principal (if using secure Hadoop)<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      login(userProvider, hostName);<a name="line.613"></a>
+<span class="sourceLineNo">614</span>      // init superusers and add the server principal (if using security)<a name="line.614"></a>
+<span class="sourceLineNo">615</span>      // or process owner as default super user.<a name="line.615"></a>
+<span class="sourceLineNo">616</span>      Superusers.initialize(conf);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>      regionServerAccounting = new RegionServerAccounting(conf);<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>      boolean isMasterNotCarryTable =<a name="line.619"></a>
+<span class="sourceLineNo">620</span>          this instanceof HMaster &amp;&amp; !LoadBalancer.isTablesOnMaster(conf);<a name="line.620"></a>
+<span class="sourceLineNo">621</span><a name="line.621"></a>
+<span class="sourceLineNo">622</span>      // no need to instantiate block cache and mob file cache when master not carry table<a name="line.622"></a>
+<span class="sourceLineNo">623</span>      if (!isMasterNotCarryTable) {<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        blockCache = BlockCacheFactory.createBlockCache(conf);<a name="line.624"></a>
+<span class="sourceLineNo">625</span>        mobFileCache = new MobFileCache(conf);<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>      uncaughtExceptionHandler =<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        (t, e) -&gt; abort("Uncaught exception in executorService thread " + t.getName(), e);<a name="line.629"></a>
+<span class="sourceLineNo">630</span><a name="line.630"></a>
+<span class="sourceLineNo">631</span>      initializeFileSystem();<a name="line.631"></a>
+<span class="sourceLineNo">632</span>      spanReceiverHost = SpanReceiverHost.getInstance(getConfiguration());<a name="line.632"></a>
+<span class="sourceLineNo">633</span><a name="line.633"></a>
+<span class="sourceLineNo">634</span>      this.configurationManager = new ConfigurationManager();<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      setupWindows(getConfiguration(), getConfigurationManager());<a name="line.635"></a>
+<span class="sourceLineNo">636</span><a name="line.636"></a>
+<span class="sourceLineNo">637</span>      // Some unit tests don't need a cluster, so no zookeeper at all<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      // Open connection to zookeeper and set primary watcher<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      zooKeeper = new ZKWatcher(conf, getProcessName() + ":" + rpcServices.isa.getPort(), this,<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        canCreateBaseZNode());<a name="line.640"></a>
+<span class="sourceLineNo">641</span>      // If no master in cluster, skip trying to track one or look for a cluster status.<a name="line.641"></a>
+<span class="sourceLineNo">642</span>      if (!this.masterless) {<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          this.csm = new ZkCoordinatedStateManager(this);<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span><a name="line.647"></a>
+<span class="sourceLineNo">648</span>        masterAddressTracker = new MasterAddressTracker(getZooKeeper(), this);<a name="line.648"></a>
+<span class="sourceLineNo">649</span>        masterAddressTracker.start();<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>        clusterStatusTracker = new ClusterStatusTracker(zooKeeper, this);<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        clusterStatusTracker.start();<a name="line.652"></a>
+<span class="sourceLineNo">653</span>      } else {<a name="line.653"></a>
+<span class="sourceLineNo">654</span>        masterAddressTracker = null;<a name="line.654"></a>
+<span class="sourceLineNo">655</span>        clusterStatusTracker = null;<a name="line.655"></a>
+<span class="sourceLineNo">656</span>      }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>      this.rpcServices.start(zooKeeper);<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      // This violates 'no starting stuff in Constructor' but Master depends on the below chore<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      // and executor being created and takes a different startup route. Lots of overlap between HRS<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      // and M (An M IS A HRS now). Need to refactor so less duplication between M and its super<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      // Master expects Constructor to put up web servers. Ugh.<a name="line.661"></a>
+<span class="sourceLineNo">662</span>      // class HRS. TODO.<a name="line.662"></a>
+<span class="sourceLineNo">663</span>      this.choreService = new ChoreService(getName(), true);<a name="line.663"></a>
+<span class="sourceLineNo">664</span>      this.executorService = new ExecutorService(getName());<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      putUpWebUI();<a name="line.665"></a>
+<span class="sourceLineNo">666</span>    } catch (Throwable t) {<a name="line.666"></a>
+<span class="sourceLineNo">667</span>      // Make sure we log the exception. HRegionServer is often started via reflection and the<a name="line.667"></a>
+<span class="sourceLineNo">668</span>      // cause of failed startup is lost.<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      LOG.error("Failed construction RegionServer", t);<a name="line.669"></a>
+<span class="sourceLineNo">670</span>      throw t;<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><a name="line.673"></a>
+<span class="sourceLineNo">674</span>  private void initNamedQueueRecorder(Configuration conf) {<a name="line.674"></a>
+<span class="sourceLineNo">675</span>    if (!(this instanceof HMaster)) {<a name="line.675"></a>
+<span class="sourceLineNo">676</span>      final boolean isOnlineLogProviderEnabled = conf.getBoolean(<a name="line.676"></a>
+<span class="sourceLineNo">677</span>        HConstants.SLOW_LOG_BUFFER_ENABLED_KEY,<a name="line.677"></a>
+<span class="sourceLineNo">678</span>        HConstants.DEFAULT_ONLINE_LOG_PROVIDER_ENABLED);<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      if (isOnlineLogProviderEnabled) {<a name="line.679"></a>
+<span class="sourceLineNo">680</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.680"></a>
+<span class="sourceLineNo">681</span>      }<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    } else {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      final boolean isBalancerDecisionRecording = conf<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        .getBoolean(BaseLoadBalancer.BALANCER_DECISION_BUFFER_ENABLED,<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          BaseLoadBalancer.DEFAULT_BALANCER_DECISION_BUFFER_ENABLED);<a name="line.685"></a>
+<span class="sourceLineNo">686</span>      if (isBalancerDecisionRecording) {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        this.namedQueueRecorder = NamedQueueRecorder.getInstance(this.conf);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>      }<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>  // HMaster should override this method to load the specific config for master<a name="line.692"></a>
+<span class="sourceLineNo">693</span>  protected String getUseThisHostnameInstead(Configuration conf) throws IOException {<a name="line.693"></a>
+<span class="sourceLineNo">694</span>    String hostname = conf.get(RS_HOSTNAME_KEY);<a name="line.694"></a>
+<span class="sourceLineNo">695</span>    if (conf.getBoolean(RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY, false)) {<a name="line.695"></a>
+<span class="sourceLineNo">696</span>      if (!StringUtils.isBlank(hostname)) {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>        String msg = RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY + " and " + RS_HOSTNAME_KEY +<a name="line.697"></a>
+<span class="sourceLineNo">698</span>          " are mutually exclusive. Do not set " + RS_HOSTNAME_DISABLE_MASTER_REVERSEDNS_KEY +<a name="line.698"></a>
+<span class="sourceLineNo">699</span>          " to true while " + RS_HOSTNAME_KEY + " is used";<a name="line.699"></a>
+<span class="sourceLineNo">700</span>        throw new IOException(msg);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      } else {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>        return rpcServices.isa.getHostName();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      }<a name="line.703"></a>
+<span class="sourceLineNo">704</span>    } else {<a name="line.704"></a>
+<span class="sourceLineNo">705</span>      return hostname;<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">709</span>  /**<a name="line.709"></a>
+<span class="sourceLineNo">710</span>   * If running on Windows, do windows-specific setup.<a name="line.710"></a>
+<span class="sourceLineNo">711</span>   */<a name="line.711"></a>
+<span class="sourceLineNo">712</span>  private static void setupWindows(final Configuration conf, ConfigurationManager cm) {<a name="line.712"></a>
+<span class="sourceLineNo">713</span>    if (!SystemUtils.IS_OS_WINDOWS) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>      Signal.handle(new Signal("HUP"), signal -&gt; {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>        conf.reloadConfiguration();<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        cm.notifyAllObservers(conf);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      });<a name="line.717"></a>
+<span class="sourceLineNo">718</span>    }<a name="line.718"></a>
+<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
+<span class="sourceLineNo">720</span><a name="line.720"></a>
+<span class="sourceLineNo">721</span>  private static NettyEventLoopGroupConfig setupNetty(Configuration conf) {<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    // Initialize netty event loop group at start as we may use it for rpc server, rpc client &amp; WAL.<a name="line.722"></a>
+<span class="sourceLineNo">723</span>    NettyEventLoopGroupConfig nelgc =<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      new NettyEventLoopGroupConfig(conf, "RS-EventLoopGroup");<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    NettyRpcClientConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    NettyAsyncFSWALConfigHelper.setEventLoopConfig(conf, nelgc.group(), nelgc.clientChannelClass());<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    return nelgc;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
+<span class="sourceLineNo">729</span><a name="line.729"></a>
+<span class="sourceLineNo">730</span>  private void initializeFileSystem() throws IOException {<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    // Get fs instance used by this RS. Do we use checksum verification in the hbase? If hbase<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    // checksum verification enabled, then automatically switch off hdfs checksum verification.<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    boolean useHBaseChecksum = conf.getBoolean(HConstants.HBASE_CHECKSUM_VERIFICATION, true);<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getWALRootDir(this.conf));<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    this.walFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    this.walRootDir = CommonFSUtils.getWALRootDir(this.conf);<a name="line.736"></a>
+<span class="sourceLineNo">737</span>    // Set 'fs.defaultFS' to match the filesystem on hbase.rootdir else<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    // underlying hadoop hdfs accessors will be going against wrong filesystem<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    // (unless all is set to defaults).<a name="line.739"></a>
+<span class="sourceLineNo">740</span>    CommonFSUtils.setFsDefault(this.conf, CommonFSUtils.getRootDir(this.conf));<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    this.dataFs = new HFileSystem(this.conf, useHBaseChecksum);<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    this.dataRootDir = CommonFSUtils.getRootDir(this.conf);<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    this.tableDescriptors = new FSTableDescriptors(this.dataFs, this.dataRootDir,<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      !canUpdateTableDescriptor(), cacheTableDescriptor());<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  protected void login(UserProvider user, String host) throws IOException {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    user.login(SecurityConstants.REGIONSERVER_KRB_KEYTAB_FILE,<a name="line.748"></a>
+<span class="sourceLineNo">749</span>      SecurityConstants.REGIONSERVER_KRB_PRINCIPAL, host);<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>  /**<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   * Wait for an active Master.<a name="line.753"></a>
+<span class="sourceLineNo">754</span>   * See override in Master superclass for how it is used.<a name="line.754"></a>
+<span class="sourceLineNo">755</span>   */<a name="line.755"></a>
+<span class="sourceLineNo">756</span>  protected void waitForMasterActive() {}<a name="line.756"></a>
+<span class="sourceLineNo">757</span><a name="line.757"></a>
+<span class="sourceLineNo">758</span>  protected String getProcessName() {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>    return REGIONSERVER;<a name="line.759"></a>
+<span class="sourceLineNo">760</span>  }<a name="line.760"></a>
+<span class="sourceLineNo">761</span><a name="line.761"></a>
+<span class="sourceLineNo">762</span>  protected boolean canCreateBaseZNode() {<a name="line.762"></a>
+<span class="sourceLineNo">763</span>    return this.masterless;<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>  protected boolean canUpdateTableDescriptor() {<a name="line.766"></a>
+<span class="sourceLineNo">767</span>    return false;<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>  protected boolean cacheTableDescriptor() {<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    return false;<a name="line.771"></a>
+<span class="sourceLineNo">772</span>  }<a name="line.772"></a>
+<span class="sourceLineNo">773</span><a name="line.773"></a>
+<span class="sourceLineNo">774</span>  protected RSRpcServices createRpcServices() throws IOException {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    return new RSRpcServices(this);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>  }<a name="line.776"></a>
+<span class="sourceLineNo">777</span><a name="line.777"></a>
+<span class="sourceLineNo">778</span>  protected void configureInfoServer() {<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    infoServer.addUnprivilegedServlet("rs-status", "/rs-status", RSStatusServlet.class);<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    infoServer.setAttribute(REGIONSERVER, this);<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>  protected Class&lt;? extends HttpServlet&gt; getDumpServlet() {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    return RSDumpServlet.class;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>  }<a name="line.785"></a>
+<span class="sourceLineNo">786</span><a name="line.786"></a>
+<span class="sourceLineNo">787</span>  @Override<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  public boolean registerService(Service instance) {<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    // No stacking of instances is allowed for a single executorService name<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    ServiceDescriptor serviceDesc = instance.getDescriptorForType();<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    String serviceName = CoprocessorRpcUtils.getServiceName(serviceDesc);<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    if (coprocessorServiceHandlers.containsKey(serviceName)) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>      LOG.error("Coprocessor executorService " + serviceName +<a name="line.793"></a>
+<span class="sourceLineNo">794</span>        " already registered, rejecting request from " + instance);<a name="line.794"></a>
+<span class="sourceLineNo">795</span>      return false;<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    }<a name="line.796"></a>
+<span class="sourceLineNo">797</span><a name="line.797"></a>
+<span class="sourceLineNo">798</span>    coprocessorServiceHandlers.put(serviceName, instance);<a name="line.798"></a>
+<span class="sourceLineNo">799</span>    if (LOG.isDebugEnabled()) {<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      LOG.debug(<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        "Registered regionserver coprocessor executorService: executorService=" + serviceName);<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    }<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    return true;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>  }<a name="line.804"></a>
+<span class="sourceLineNo">805</span><a name="line.805"></a>
+<span class="sourceLineNo">806</span>  private Configuration cleanupConfiguration() {<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    Configuration conf = this.conf;<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    // We use ZKConnectionRegistry for all the internal communication, primarily for these reasons:<a name="line.808"></a>
+<span class="sourceLineNo">809</span>    // - Decouples RS and master life cycles. RegionServers can continue be up independent of<a name="line.809"></a>
+<span class="sourceLineNo">810</span>    //   masters' availability.<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    // - Configuration management for region servers (cluster internal) is much simpler when adding<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    //   new masters or removing existing masters, since only clients' config needs to be updated.<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    // - We need to retain ZKConnectionRegistry for replication use anyway, so we just extend it for<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    //   other internal connections too.<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    conf.set(HConstants.CLIENT_CONNECTION_REGISTRY_IMPL_CONF_KEY,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>        HConstants.ZK_CONNECTION_REGISTRY_CLASS);<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    if (conf.get(HConstants.CLIENT_ZOOKEEPER_QUORUM) != null) {<a name="line.817"></a>
+<span class="sourceLineNo">818</span>      // Use server ZK cluster for server-issued connections, so we clone<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      // the conf and unset the client ZK related properties<a name="line.819"></a>
+<span class="sourceLineNo">820</span>      conf = new Configuration(this.conf);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>      conf.unset(HConstants.CLIENT_ZOOKEEPER_QUORUM);<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    }<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    return conf;<a name="line.823"></a>
+<span class="sourceLineNo">824</span>  }<a name="line.824"></a>
+<span class="sourceLineNo">825</span><a name="line.825"></a>
+<span class="sourceLineNo">826</span>  /**<a name="line.826"></a>
+<span class="sourceLineNo">827</span>   * Run test on configured codecs to make sure supporting libs are in place.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>   */<a name="line.828"></a>
+<span class="sourceLineNo">829</span>  private static void checkCodecs(final Configuration c) throws IOException {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    // check to see if the codec list is available:<a name="line.830"></a>
+<span class="sourceLineNo">831</span>    String [] codecs = c.getStrings(REGIONSERVER_CODEC, (String[])null);<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    if (codecs == null) return;<a name="line.832"></a>
+<span class="sourceLineNo">833</span>    for (String codec : codecs) {<a name="line.833"></a>
+<span class="sourceLineNo">834</span>      if (!CompressionTest.testCompression(codec)) {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>        throw new IOException("Compression codec " + codec +<a name="line.835"></a>
+<span class="sourceLineNo">836</span>          " not supported, aborting RS construction");<a name="line.836"></a>
+<span class="sourceLineNo">837</span>      }<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    }<a name="line.838"></a>
+<span class="sourceLineNo">839</span>  }<a name="line.839"></a>
+<span class="sourceLineNo">840</span><a name="line.840"></a>
+<span class="sourceLineNo">841</span>  public String getClusterId() {<a name="line.841"></a>
+<span class="sourceLineNo">842</span>    return this.clusterId;<a name="line.842"></a>
+<span class="sourceLineNo">843</span>  }<a name="line.843"></a>
+<span class="sourceLineNo">844</span><a name="line.844"></a>
+<span class="sourceLineNo">845</span>  /**<a name="line.845"></a>
+<span class="sourceLineNo">846</span>   * Setup our cluster connection if not already initialized.<a name="line.846"></a>
+<span class="sourceLineNo">847</span>   */<a name="line.847"></a>
+<span class="sourceLineNo">848</span>  protected final synchronized void setupClusterConnection() throws IOException {<a name="line.848"></a>
+<span class="sourceLineNo">849</span>    if (asyncClusterConnection == null) {<a name="line.849"></a>
+<span class="sourceLineNo">850</span>      Configuration conf = cleanupConfiguration();<a name="line.850"></a>
+<span class="sourceLineNo">851</span>      InetSocketAddress localAddress = new InetSocketAddress(this.rpcServices.isa.getAddress(), 0);<a name="line.851"></a>
+<span class="sourceLineNo">852</span>      User user = userProvider.getCurrent();<a name="line.852"></a>
+<span class="sourceLineNo">853</span>      asyncClusterConnection =<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        ClusterConnectionFactory.createAsyncClusterConnection(conf, localAddress, user);<a name="line.854"></a>
+<span class="sourceLineNo">855</span>    }<a name="line.855"></a>
+<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
+<span class="sourceLineNo">857</span><a name="line.857"></a>
+<span class="sourceLineNo">858</span>  /**<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * All initialization needed before we go register with Master.&lt;br&gt;<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * Do bare minimum. Do bulk of initializations AFTER we've connected to the Master.&lt;br&gt;<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * In here we just put up the RpcServer, setup Connection, and ZooKeeper.<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   */<a name="line.862"></a>
+<span class="sourceLineNo">863</span>  private void preRegistrationInitialization() {<a name="line.863"></a>
+<span class="sourceLineNo">864</span>    try {<a name="line.864"></a>
+<span class="sourceLineNo">865</span>      initializeZooKeeper();<a name="line.865"></a>
+<span class="sourceLineNo">866</span>      setupClusterConnection();<a name="line.866"></a>
+<span class="sourceLineNo">867</span>      // Setup RPC client for master communication<a name="line.867"></a>
+<span class="sourceLineNo">868</span>      this.rpcClient = asyncClusterConnection.getRpcClient();<a name="line.868"></a>
+<span class="sourceLineNo">869</span>    } catch (Throwable t) {<a name="line.869"></a>
+<span class="sourceLineNo">870</span>      // Call stop if error or process will stick around for ever since server<a name="line.870"></a>
+<span class="sourceLineNo">871</span>      // puts up non-daemon threads.<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      this.rpcServices.stop();<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      abort("Initialization of RS failed.  Hence aborting RS.", t);<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    }<a name="line.874"></a>
+<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span>  /**<a name="line.877"></a>
+<span class="sourceLineNo">878</span>   * Bring up connection to zk ensemble and then wait until a master for this cluster and then after<a name="line.878"></a>
+<span class="sourceLineNo">879</span>   * that, wait until cluster 'up' flag has been set. This is the order in which master does things.<a name="line.879"></a>
+<span class="sourceLineNo">880</span>   * &lt;p&gt;<a name="line.880"></a>
+<span class="sourceLineNo">881</span>   * Finally open long-living server short-circuit connection.<a name="line.881"></a>
+<span class="sourceLineNo">882</span>   */<a name="line.882"></a>
+<span class="sourceLineNo">883</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="RV_RETURN_VALUE_IGNORED_BAD_PRACTICE",<a name="line.883"></a>
+<span class="sourceLineNo">884</span>    justification="cluster Id znode read would give us correct response")<a name="line.884"></a>
+<span class="sourceLineNo">885</span>  private void initializeZooKeeper() throws IOException, InterruptedException {<a name="line.885"></a>
+<span class="sourceLineNo">886</span>    // Nothing to do in here if no Master in the mix.<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    if (this.masterless) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      return;<a name="line.888"></a>
+<span class="sourceLineNo">889</span>    }<a name="line.889"></a>
+<span class="sourceLineNo">890</span><a name="line.890"></a>
+<span class="sourceLineNo">891</span>    // Create the master address tracker, register with zk, and start it.  Then<a name="line.891"></a>
+<span class="sourceLineNo">892</span>    // block until a master is available.  No point in starting up if no master<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    // running.<a name="line.893"></a>
+<span class="sourceLineNo">894</span>    blockAndCheckIfStopped(this.masterAddressTracker);<a name="line.894"></a>
+<span class="sourceLineNo">895</span><a name="line.895"></a>
+<span class="sourceLineNo">896</span>    // Wait on cluster being up.  Master will set this flag up in zookeeper<a name="line.896"></a>
+<span class="sourceLineNo">897</span>    // when ready.<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    blockAndCheckIfStopped(this.clusterStatusTracker);<a name="line.898"></a>
+<span class="sourceLineNo">899</span><a name="line.899"></a>
+<span class="sourceLineNo">900</span>    // If we are HMaster then the cluster id should have already been set.<a name="line.900"></a>
+<span class="sourceLineNo">901</span>    if (clusterId == null) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>      // Retrieve clusterId<a name="line.902"></a>
+<span class="sourceLineNo">903</span>      // Since cluster status is now up<a name="line.903"></a>
+<span class="sourceLineNo">904</span>      // ID should have already been set by HMaster<a name="line.904"></a>
+<span class="sourceLineNo">905</span>      try {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        clusterId = ZKClusterId.readClusterIdZNode(this.zooKeeper);<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        if (clusterId == null) {<a name="line.907"></a>
+<span class="sourceLineNo">908</span>          this.abort("Cluster ID has not been set");<a name="line.908"></a>
+<span class="sourceLineNo">909</span>        }<a name="line.909"></a>
+<span class="sourceLineNo">910</span>        LOG.info("ClusterId : " + clusterId);<a name="line.910"></a>
+<span class="sourceLineNo">911</span>      } catch (KeeperException e) {<a name="line.911"></a>
+<span class="sourceLineNo">912</span>        this.abort("Failed to retrieve Cluster ID", e);<a name="line.912"></a>
+<span class="sourceLineNo">913</span>      }<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    }<a name="line.914"></a>
+<span class="sourceLineNo">915</span><a name="line.915"></a>
+<span class="sourceLineNo">916</span>    waitForMasterActive();<a name="line.916"></a>
+<span class="sourceLineNo">917</span>    if (isStopped() || isAborted()) {<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      return; // No need for further initialization<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>    // watch for snapshots and other procedures<a name="line.921"></a>
+<span class="sourceLineNo">922</span>    try {<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      rspmHost = new RegionServerProcedureManagerHost();<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      rspmHost.loadProcedures(conf);<a name="line.924"></a>
+<span class="sourceLineNo">925</span>      rspmHost.initialize(this);<a name="line.925"></a>
+<span class="sourceLineNo">926</span>    } catch (KeeperException e) {<a name="line.926"></a>
+<span class="sourceLineNo">927</span>      this.abort("Failed to reach coordination cluster when creating procedure handler.", e);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>    }<a name="line.928"></a>
+<span class="sourceLineNo">929</span>  }<a name="line.929"></a>
+<span class="sourceLineNo">930</span><a name="line.930"></a>
+<span class="sourceLineNo">931</span>  /**<a name="line.931"></a>
+<span class="sourceLineNo">932</span>   * Utilty method to wait indefinitely on a znode availability while checking<a name="line.932"></a>
+<span class="sourceLineNo">933</span>   * if the region server is shut down<a name="line.933"></a>
+<span class="sourceLineNo">934</span>   * @param tracker znode tracker to use<a name="line.934"></a>
+<span class="sourceLineNo">935</span>   * @throws IOException any IO exception, plus if the RS is stopped<a name="line.935"></a>
+<span class="sourceLineNo">936</span>   * @throws InterruptedException if the waiting thread is interrupted<a name="line.936"></a>
+<span class="sourceLineNo">937</span>   */<a name="line.937"></a>
+<span class="sourceLineNo">938</span>  private void blockAndCheckIfStopped(ZKNodeTracker tracker)<a name="line.938"></a>
+<span class="sourceLineNo">939</span>      throws IOException, InterruptedException {<a name="line.939"></a>
+<span class="sourceLineNo">940</span>    while (tracker.blockUntilAvailable(this.msgInterval, false) == null) {<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      if (this.stopped) {<a name="line.941"></a>
+<span class="sourceLineNo">942</span>        throw new IOException("Received the shutdown message while waiting.");<a name="line.942"></a>
+<span class="sourceLineNo">943</span>      }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>    }<a name="line.944"></a>
+<span class="sourceLineNo">945</span>  }<a name="line.945"></a>
+<span class="sourceLineNo">946</span><a name="line.946"></a>
+<span class="sourceLineNo">947</span>  /**<a name="line.947"></a>
+<span class="sourceLineNo">948</span>   * @return True if the cluster is up.<a name="line.948"></a>
+<span class="sourceLineNo">949</span>   */<a name="line.949"></a>
+<span class="sourceLineNo">950</span>  @Override<a name="line.950"></a>
+<span class="sourceLineNo">951</span>  public boolean isClusterUp() {<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    return this.masterless ||<a name="line.952"></a>
+<span class="sourceLineNo">953</span>        (this.clusterStatusTracker != null &amp;&amp; this.clusterStatusTracker.isClusterUp());<a name="line.953"></a>
+<span class="sourceLineNo">954</span>  }<a name="line.954"></a>
+<span class="sourceLineNo">955</span><a name="line.955"></a>
+<span class="sourceLineNo">956</span>  /**<a name="line.956"></a>
+<span class="sourceLineNo">957</span>   * The HRegionServer sticks in this loop until closed.<a name="line.957"></a>
+<span class="sourceLineNo">958</span>   */<a name="line.958"></a>
+<span class="sourceLineNo">959</span>  @Override<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  public void run() {<a name="line.960"></a>
+<span class="sourceLineNo">961</span>    if (isStopped()) {<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      LOG.info("Skipping run; stopped");<a name="line.962"></a>
+<span class="sourceLineNo">963</span>      return;<a name="line.963"></a>
+<span class="sourceLineNo">964</span>    }<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    try {<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      // Do pre-registration initializations; zookeeper, lease threads, etc.<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      preRegistrationInitialization();<a name="line.967"></a>
+<span class="sourceLineNo">968</span>    } catch (Throwable e) {<a name="line.968"></a>
+<span class="sourceLineNo">969</span>      abort("Fatal exception during initialization", e);<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    }<a name="line.970"></a>
+<span class="sourceLineNo">971</span><a name="line.971"></a>
+<span class="sourceLineNo">972</span>    try {<a name="line.972"></a>
+<span class="sourceLineNo">973</span>      if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.973"></a>
+<span class="sourceLineNo">974</span>        ShutdownHook.install(conf, dataFs, this, Thread.currentThread());<a name="line.974"></a>
+<span class="sourceLineNo">975</span>        // Initialize the RegionServerCoprocessorHost now that our ephemeral<a name="line.975"></a>
+<span class="sourceLineNo">976</span>        // node was created, in case any coprocessors want to use ZooKeeper<a name="line.976"></a>
+<span class="sourceLineNo">977</span>        this.rsHost = new RegionServerCoprocessorHost(this, this.conf);<a name="line.977"></a>
+<span class="sourceLineNo">978</span><a name="line.978"></a>
+<span class="sourceLineNo">979</span>        // Try and register with the Master; tell it we are here.  Break if server is stopped or<a name="line.979"></a>
+<span class="sourceLineNo">980</span>        // the clusterup flag is down or hdfs went wacky. Once registered successfully, go ahead and<a name="line.980"></a>
+<span class="sourceLineNo">981</span>        // start up all Services. Use RetryCounter to get backoff in case Master is struggling to<a name="line.981"></a>
+<span class="sourceLineNo">982</span>        // come up.<a name="line.982"></a>
+<span class="sourceLineNo">983</span>        LOG.debug("About to register with Master.");<a name="line.983"></a>
+<span class="sourceLineNo">984</span>        RetryCounterFactory rcf =<a name="line.984"></a>
+<span class="sourceLineNo">985</span>          new RetryCounterFactory(Integer.MAX_VALUE, this.sleeper.getPeriod(), 1000 * 60 * 5);<a name="line.985"></a>
+<span class="sourceLineNo">986</span>        RetryCounter rc = rcf.create();<a name="line.986"></a>
+<span class="sourceLineNo">987</span>        while (keepLooping()) {<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          RegionServerStartupResponse w = reportForDuty();<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          if (w == null) {<a name="line.989"></a>
+<span class="sourceLineNo">990</span>            long sleepTime = rc.getBackoffTimeAndIncrementAttempts();<a name="line.990"></a>
+<span class="sourceLineNo">991</span>            LOG.warn("reportForDuty failed; sleeping {} ms and then retrying.", sleepTime);<a name="line.991"></a>
+<span class="sourceLineNo">992</span>            this.sleeper.sleep(sleepTime);<a name="line.992"></a>
+<span class="sourceLineNo">993</span>          } else {<a name="line.993"></a>
+<span class="sourceLineNo">994</span>            handleReportForDutyResponse(w);<a name="line.994"></a>
+<span class="sourceLineNo">995</span>            break;<a name="line.995"></a>
+<span class="sourceLineNo">996</span>          }<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        }<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      }<a name="line.998"></a>
+<span class="sourceLineNo">999</span><a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      if (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>        // start the snapshot handler and other procedure handlers,<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>        // since the server is ready to run<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span>        if (this.rspmHost != null) {<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>          this.rspmHost.start();<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>        }<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>        // Start the Quota Manager<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>        if (this.rsQuotaManager != null) {<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>          rsQuotaManager.start(getRpcServer().getScheduler());<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>        }<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        if (this.rsSpaceQuotaManager != null) {<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>          this.rsSpaceQuotaManager.start();<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>        }<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      }<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span><a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      // We registered with the Master.  Go into run mode.<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      long lastMsg = System.currentTimeMillis();<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span>      long oldRequestCount = -1;<a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      // The main run loop.<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>      while (!isStopped() &amp;&amp; isHealthy()) {<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        if (!isClusterUp()) {<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>          if (onlineRegions.isEmpty()) {<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>            stop("Exiting; cluster shutdown set and not carrying any regions");<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          } else if (!this.stopping) {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>            this.stopping = true;<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>            LOG.info("Closing user regions");<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>            closeUserRegions(this.abortRequested.get());<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>          } else {<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>            boolean allUserRegionsOffline = areAllUserRegionsOffline();<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>            if (allUserRegionsOffline) {<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>              // Set stopped if no more write requests tp meta tables<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>              // since last time we went around the loop.  Any open<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>              // meta regions will be closed on our way out.<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>              if (oldRequestCount == getWriteRequestCount()) {<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>                stop("Stopped; only catalog regions remaining online");<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>                break;<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>              }<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>              oldRequestCount = getWriteRequestCount();<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>            } else {<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>              // Make sure all regions have been closed -- some regions may<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>              // have not got it because we were splitting at the time of<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>              // the call to closeUserRegions.<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>              closeUserRegions(this.abortRequested.get());<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>            }<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>            LOG.debug("Waiting on " + getOnlineRegionsAsPrintableString());<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>          }<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>        }<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>        long now = System.currentTimeMillis();<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>        if ((now - lastMsg) &gt;= msgInterval) {<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>          tryRegionServerReport(lastMsg, now);<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>          lastMsg = System.currentTimeMillis();<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>        }<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>        if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>          this.sleeper.sleep();<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>        }<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>      } // for<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    } catch (Throwable t) {<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>      if (!rpcServices.checkOOME(t)) {<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>        String prefix = t instanceof YouAreDeadException? "": "Unhandled: ";<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>        abort(prefix + t.getMessage(), t);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>      }<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    }<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span><a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    if (this.leaseManager != null) {<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>      this.leaseManager.closeAfterLeasesExpire();<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>    }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    if (this.splitLogWorker != null) {<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>      splitLogWorker.stop();<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    }<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>    if (this.infoServer != null) {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>      LOG.info("Stopping infoServer");<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>      try {<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>        this.infoServer.stop();<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>      } catch (Exception e) {<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>        LOG.error("Failed to stop infoServer", e);<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>      }<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    }<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    // Send cache a shutdown.<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    if (blockCache != null) {<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>      blockCache.shutdown();<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    }<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>    if (mobFileCache != null) {<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>      mobFileCache.shutdown();<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    }<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span><a name="line.1084"></a>
+<span class="sourceLineNo">1085</span>    // Send interrupts to wake up threads if sleeping so they notice shutdown.<a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>    // TODO: Should we check they are alive? If OOME could have exited already<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    if (this.hMemManager != null) this.hMemManager.stop();<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    if (this.cacheFlusher != null) this.cacheFlusher.interruptIfNecessary();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    if (this.compactSplitThread != null) this.compactSplitThread.interruptIfNecessary();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span><a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    // Stop the snapshot and other procedure handlers, forcefully killing all running tasks<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span>    if (rspmHost != null) {<a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>      rspmHost.stop(this.abortRequested.get() || this.killed);<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    }<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span><a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    if (this.killed) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      // Just skip out w/o closing regions.  Used when testing.<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    } else if (abortRequested.get()) {<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span>      if (this.dataFsOk) {<a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>        closeUserRegions(abortRequested.get()); // Don't leave any open file handles<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>      }<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>      LOG.info("aborting server " + this.serverName);<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>    } else {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>      closeUserRegions(abortRequested.get());<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      LOG.info("stopping server " + this.serverName);<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span><a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    if (this.asyncClusterConnection != null) {<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>      try {<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>        this.asyncClusterConnection.close();<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      } catch (IOException e) {<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>        // Although the {@link Closeable} interface throws an {@link<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>        // IOException}, in reality, the implementation would never do that.<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>        LOG.warn("Attempt to close server's AsyncClusterConnection failed.", e);<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>      }<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    // Closing the compactSplit thread before closing meta regions<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    if (!this.killed &amp;&amp; containsMetaTableRegions()) {<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>      if (!abortRequested.get() || this.dataFsOk) {<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>        if (this.compactSplitThread != null) {<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>          this.compactSplitThread.join();<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>          this.compactSplitThread = null;<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span>        }<a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>        closeMetaTableRegions(abortRequested.get());<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>      }<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    }<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span><a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>    if (!this.killed &amp;&amp; this.dataFsOk) {<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>      waitOnAllRegionsToClose(abortRequested.get());<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      LOG.info("stopping server " + this.serverName + "; all regions closed.");<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>    }<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span><a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    // Stop the quota manager<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    if (rsQuotaManager != null) {<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>      rsQuotaManager.stop();<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span>    }<a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>    if (rsSpaceQuotaManager != null) {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>      rsSpaceQuotaManager.stop();<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      rsSpaceQuotaManager = null;<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>    }<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span><a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>    // flag may be changed when closing regions throws exception.<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>    if (this.dataFsOk) {<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      shutdownWAL(!abortRequested.get());<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span><a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>    // Make sure the proxy is down.<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>    if (this.rssStub != null) {<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>      this.rssStub = null;<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>    if (this.lockStub != null) {<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>      this.lockStub = null;<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>    }<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>    if (this.rpcClient != null) {<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      this.rpcClient.close();<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    if (this.leaseManager != null) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      this.leaseManager.close();<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>    }<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>    if (this.pauseMonitor != null) {<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>      this.pauseMonitor.stop();<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>    }<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>    if (!killed) {<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>      stopServiceThreads();<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    }<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span><a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>    if (this.rpcServices != null) {<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>      this.rpcServices.stop();<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    }<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span><a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>    try {<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>      deleteMyEphemeralNode();<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    } catch (KeeperException.NoNodeException nn) {<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>      // pass<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>    } catch (KeeperException e) {<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>      LOG.warn("Failed deleting my ephemeral node", e);<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>    }<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>    // We may have failed to delete the znode at the previous step, but<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>    //  we delete the file anyway: a second attempt to delete the znode is likely to fail again.<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    ZNodeClearer.deleteMyEphemeralNodeOnDisk();<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span><a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    if (this.zooKeeper != null) {<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>      this.zooKeeper.close();<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>    }<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span>    this.shutDown = true;<a name="line.1186"></a>
+<span class="sourceLineNo">1187</span>    LOG.info("Exiting; stopping=" + this.serverName + "; zookeeper connection closed.");<a name="line.1187"></a>
+<span class="sourceLineNo">1188</span>  }<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span><a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  private boolean containsMetaTableRegions() {<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span>    return onlineRegions.containsKey(RegionInfoBuilder.FIRST_META_REGIONINFO.getEncodedName());<a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  }<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span><a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>  private boolean areAllUserRegionsOffline() {<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>    if (getNumberOfOnlineRegions() &gt; 2) return false;<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>    boolean allUserRegionsOffline = true;<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>      if (!e.getValue().getRegionInfo().isMetaRegion()) {<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>        allUserRegionsOffline = false;<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>        break;<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>      }<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>    }<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>    return allUserRegionsOffline;<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>  }<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span><a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>  /**<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>   * @return Current write count for all online regions.<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>   */<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>  private long getWriteRequestCount() {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>    long writeCount = 0;<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>    for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>      writeCount += e.getValue().getWriteRequestsCount();<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>    }<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>    return writeCount;<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>  }<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span><a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>  @VisibleForTesting<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>  protected void tryRegionServerReport(long reportStartTime, long reportEndTime)<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      throws IOException {<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>      return;<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>    }<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    ClusterStatusProtos.ServerLoad sl = buildServerLoad(reportStartTime, reportEndTime);<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>    try {<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>      RegionServerReportRequest.Builder request = RegionServerReportRequest.newBuilder();<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span>      request.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>      request.setLoad(sl);<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>      rss.regionServerReport(null, request.build());<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    } catch (ServiceException se) {<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>      if (ioe instanceof YouAreDeadException) {<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span>        // This will be caught and handled as a fatal error in run()<a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>        throw ioe;<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>      }<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>      if (rssStub == rss) {<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>        rssStub = null;<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>      }<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>      // Couldn't connect to the master, get location from zk and reconnect<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>      // Method blocks until new master is found or we are stopped<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>      createRegionServerStatusStub(true);<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>    }<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>  }<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span><a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>  /**<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   * Reports the given map of Regions and their size on the filesystem to the active Master.<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>   *<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   * @param regionSizeStore The store containing region sizes<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>   * @return false if FileSystemUtilizationChore should pause reporting to master. true otherwise<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>   */<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>  public boolean reportRegionSizesForQuotas(RegionSizeStore regionSizeStore) {<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>    if (rss == null) {<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>      // the current server could be stopping.<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>      LOG.trace("Skipping Region size report to HMaster as stub is null");<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>      return true;<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>    }<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>    try {<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>      buildReportAndSend(rss, regionSizeStore);<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>    } catch (ServiceException se) {<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>      if (ioe instanceof PleaseHoldException) {<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>        LOG.trace("Failed to report region sizes to Master because it is initializing."<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>            + " This will be retried.", ioe);<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span>        return true;<a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>      }<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span>      if (rssStub == rss) {<a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>        rssStub = null;<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>      }<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span>      createRegionServerStatusStub(true);<a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>      if (ioe instanceof DoNotRetryIOException) {<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>        DoNotRetryIOException doNotRetryEx = (DoNotRetryIOException) ioe;<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>        if (doNotRetryEx.getCause() != null) {<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>          Throwable t = doNotRetryEx.getCause();<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>          if (t instanceof UnsupportedOperationException) {<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>            LOG.debug("master doesn't support ReportRegionSpaceUse, pause before retrying");<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>            return false;<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>          }<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>        }<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span>      }<a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>      LOG.debug("Failed to report region sizes to Master. This will be retried.", ioe);<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span>    }<a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>    return true;<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>  /**<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   * Builds the region size report and sends it to the master. Upon successful sending of the<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   * report, the region sizes that were sent are marked as sent.<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>   *<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>   * @param rss The stub to send to the Master<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>   * @param regionSizeStore The store containing region sizes<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>   */<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>  private void buildReportAndSend(RegionServerStatusService.BlockingInterface rss,<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      RegionSizeStore regionSizeStore) throws ServiceException {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>    RegionSpaceUseReportRequest request =<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>        buildRegionSpaceUseReportRequest(Objects.requireNonNull(regionSizeStore));<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>    rss.reportRegionSpaceUse(null, request);<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>    // Record the number of size reports sent<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>    if (metricsRegionServer != null) {<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>      metricsRegionServer.incrementNumRegionSizeReportsSent(regionSizeStore.size());<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>    }<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>  }<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span><a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>  /**<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>   * Builds a {@link RegionSpaceUseReportRequest} protobuf message from the region size map.<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>   *<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>   * @param regionSizes The size in bytes of regions<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>   * @return The corresponding protocol buffer message.<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>   */<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>  RegionSpaceUseReportRequest buildRegionSpaceUseReportRequest(RegionSizeStore regionSizes) {<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>    RegionSpaceUseReportRequest.Builder request = RegionSpaceUseReportRequest.newBuilder();<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>    for (Entry&lt;RegionInfo, RegionSize&gt; entry : regionSizes) {<a name="line.1314"></a>
+<span class="sourceLineNo">1315</span>      request.addSpaceUse(convertRegionSize(entry.getKey(), entry.getValue().getSize()));<a name="line.1315"></a>
+<span class="sourceLineNo">1316</span>    }<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>    return request.build();<a name="line.1317"></a>
+<span class="sourceLineNo">1318</span>  }<a name="line.1318"></a>
+<span class="sourceLineNo">1319</span><a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  /**<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span>   * Converts a pair of {@link RegionInfo} and {@code long} into a {@link RegionSpaceUse}<a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>   * protobuf message.<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>   *<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>   * @param regionInfo The RegionInfo<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>   * @param sizeInBytes The size in bytes of the Region<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>   * @return The protocol buffer<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>   */<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>  RegionSpaceUse convertRegionSize(RegionInfo regionInfo, Long sizeInBytes) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>    return RegionSpaceUse.newBuilder()<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>        .setRegionInfo(ProtobufUtil.toRegionInfo(Objects.requireNonNull(regionInfo)))<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>        .setRegionSize(Objects.requireNonNull(sizeInBytes))<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>        .build();<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>  }<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span><a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>  private ClusterStatusProtos.ServerLoad buildServerLoad(long reportStartTime, long reportEndTime)<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>      throws IOException {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>    // We're getting the MetricsRegionServerWrapper here because the wrapper computes requests<a name="line.1337"></a>
+<span class="sourceLineNo">1338</span>    // per second, and other metrics  As long as metrics are part of ServerLoad it's best to use<a name="line.1338"></a>
+<span class="sourceLineNo">1339</span>    // the wrapper to compute those numbers in one place.<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span>    // In the long term most of these should be moved off of ServerLoad and the heart beat.<a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>    // Instead they should be stored in an HBase table so that external visibility into HBase is<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>    // improved; Additionally the load balancer will be able to take advantage of a more complete<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>    // history.<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>    MetricsRegionServerWrapper regionServerWrapper = metricsRegionServer.getRegionServerWrapper();<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>    long usedMemory = -1L;<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>    long maxMemory = -1L;<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>    final MemoryUsage usage = MemorySizeUtil.safeGetHeapMemoryUsage();<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>    if (usage != null) {<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span>      usedMemory = usage.getUsed();<a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>      maxMemory = usage.getMax();<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>    ClusterStatusProtos.ServerLoad.Builder serverLoad = ClusterStatusProtos.ServerLoad.newBuilder();<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    serverLoad.setNumberOfRequests((int) regionServerWrapper.getRequestsPerSecond());<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    serverLoad.setTotalNumberOfRequests(regionServerWrapper.getTotalRequestCount());<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>    serverLoad.setUsedHeapMB((int)(usedMemory / 1024 / 1024));<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    serverLoad.setMaxHeapMB((int) (maxMemory / 1024 / 1024));<a name="line.1358"></a>
+<span class="sourceLineNo">1359</span>    Set&lt;String&gt; coprocessors = getWAL(null).getCoprocessorHost().getCoprocessors();<a name="line.1359"></a>
+<span class="sourceLineNo">1360</span>    Builder coprocessorBuilder = Coprocessor.newBuilder();<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>    for (String coprocessor : coprocessors) {<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>      serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>    }<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>    RegionLoad.Builder regionLoadBldr = RegionLoad.newBuilder();<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    RegionSpecifier.Builder regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    for (HRegion region : regions) {<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>      if (region.getCoprocessorHost() != null) {<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        Set&lt;String&gt; regionCoprocessors = region.getCoprocessorHost().getCoprocessors();<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>        for (String regionCoprocessor : regionCoprocessors) {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>          serverLoad.addCoprocessors(coprocessorBuilder.setName(regionCoprocessor).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>      serverLoad.addRegionLoads(createRegionLoad(region, regionLoadBldr, regionSpecifier));<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      for (String coprocessor : getWAL(region.getRegionInfo()).getCoprocessorHost()<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          .getCoprocessors()) {<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>        serverLoad.addCoprocessors(coprocessorBuilder.setName(coprocessor).build());<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      }<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>    }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>    serverLoad.setReportStartTime(reportStartTime);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>    serverLoad.setReportEndTime(reportEndTime);<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>    if (this.infoServer != null) {<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>      serverLoad.setInfoServerPort(this.infoServer.getPort());<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>    } else {<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>      serverLoad.setInfoServerPort(-1);<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>    MetricsUserAggregateSource userSource =<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>        metricsRegionServer.getMetricsUserAggregate().getSource();<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    if (userSource != null) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>      Map&lt;String, MetricsUserSource&gt; userMetricMap = userSource.getUserSources();<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      for (Entry&lt;String, MetricsUserSource&gt; entry : userMetricMap.entrySet()) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        serverLoad.addUserLoads(createUserLoad(entry.getKey(), entry.getValue()));<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    if (sameReplicationSourceAndSink &amp;&amp; replicationSourceHandler != null) {<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      // always refresh first to get the latest value<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>      ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      if (rLoad != null) {<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>        serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>          .getReplicationLoadSourceEntries()) {<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>          serverLoad.addReplLoadSource(rLS);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>        }<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>      }<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>    } else {<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      if (replicationSourceHandler != null) {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        ReplicationLoad rLoad = replicationSourceHandler.refreshAndGetReplicationLoad();<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>        if (rLoad != null) {<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>          for (ClusterStatusProtos.ReplicationLoadSource rLS : rLoad<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>            .getReplicationLoadSourceEntries()) {<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>            serverLoad.addReplLoadSource(rLS);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>          }<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        }<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>      }<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      if (replicationSinkHandler != null) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        ReplicationLoad rLoad = replicationSinkHandler.refreshAndGetReplicationLoad();<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>        if (rLoad != null) {<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>          serverLoad.setReplLoadSink(rLoad.getReplicationLoadSink());<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        }<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>      }<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>    }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>    return serverLoad.build();<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span>  }<a name="line.1424"></a>
+<span class="sourceLineNo">1425</span><a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>  private String getOnlineRegionsAsPrintableString() {<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span>    StringBuilder sb = new StringBuilder();<a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    for (Region r: this.onlineRegions.values()) {<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>      if (sb.length() &gt; 0) sb.append(", ");<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>      sb.append(r.getRegionInfo().getEncodedName());<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>    }<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>    return sb.toString();<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>  }<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span><a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>  /**<a name="line.1435"></a>
+<span class="sourceLineNo">1436</span>   * Wait on regions close.<a name="line.1436"></a>
+<span class="sourceLineNo">1437</span>   */<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>  private void waitOnAllRegionsToClose(final boolean abort) {<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>    // Wait till all regions are closed before going out.<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>    int lastCount = -1;<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>    long previousLogTime = 0;<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>    Set&lt;String&gt; closedRegions = new HashSet&lt;&gt;();<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>    boolean interrupted = false;<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>    try {<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      while (!onlineRegions.isEmpty()) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        int count = getNumberOfOnlineRegions();<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>        // Only print a message if the count of regions has changed.<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>        if (count != lastCount) {<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>          // Log every second at most<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>            previousLogTime = System.currentTimeMillis();<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>            lastCount = count;<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>            LOG.info("Waiting on " + count + " regions to close");<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>            // Only print out regions still closing if a small number else will<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>            // swamp the log.<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>            if (count &lt; 10 &amp;&amp; LOG.isDebugEnabled()) {<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>              LOG.debug("Online Regions=" + this.onlineRegions);<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>            }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>          }<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        }<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>        // Ensure all user regions have been sent a close. Use this to<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        // protect against the case where an open comes in after we start the<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        // iterator of onlineRegions to close all user regions.<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>        for (Map.Entry&lt;String, HRegion&gt; e : this.onlineRegions.entrySet()) {<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span>          RegionInfo hri = e.getValue().getRegionInfo();<a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>          if (!this.regionsInTransitionInRS.containsKey(hri.getEncodedNameAsBytes()) &amp;&amp;<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>              !closedRegions.contains(hri.getEncodedName())) {<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span>            closedRegions.add(hri.getEncodedName());<a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>            // Don't update zk with this close transition; pass false.<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>            closeRegionIgnoreErrors(hri, abort);<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>          }<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>        }<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>        // No regions in RIT, we could stop waiting now.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>        if (this.regionsInTransitionInRS.isEmpty()) {<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>          if (!onlineRegions.isEmpty()) {<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>            LOG.info("We were exiting though online regions are not empty," +<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>                " because some regions failed closing");<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>          }<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>          break;<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        } else {<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>          LOG.debug("Waiting on {}", this.regionsInTransitionInRS.keySet().stream().<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>            map(e -&gt; Bytes.toString(e)).collect(Collectors.joining(", ")));<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        }<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        if (sleepInterrupted(200)) {<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>          interrupted = true;<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>        }<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      }<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>    } finally {<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      if (interrupted) {<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>        Thread.currentThread().interrupt();<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      }<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>    }<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>  }<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span><a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>  private static boolean sleepInterrupted(long millis) {<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>    boolean interrupted = false;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>    try {<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>      Thread.sleep(millis);<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>    } catch (InterruptedException e) {<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>      LOG.warn("Interrupted while sleeping");<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>      interrupted = true;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>    }<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>    return interrupted;<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>  }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span><a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>  private void shutdownWAL(final boolean close) {<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>    if (this.walFactory != null) {<a name="line.1507"></a>
+<span class="sourceLineNo">1508</span>      try {<a name="line.1508"></a>
+<span class="sourceLineNo">1509</span>        if (close) {<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>          walFactory.close();<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>        } else {<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>          walFactory.shutdown();<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        }<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>      } catch (Throwable e) {<a name="line.1514"></a>
+<span class="sourceLineNo">1515</span>        e = e instanceof RemoteException ? ((RemoteException) e).unwrapRemoteException() : e;<a name="line.1515"></a>
+<span class="sourceLineNo">1516</span>        LOG.error("Shutdown / close of WAL failed: " + e);<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        LOG.debug("Shutdown / close exception details:", e);<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>      }<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>    }<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>  }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span><a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>  /**<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>   * get NamedQueue Provider to add different logs to ringbuffer<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>   *<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>   * @return NamedQueueRecorder<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span>   */<a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>  public NamedQueueRecorder getNamedQueueRecorder() {<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>    return this.namedQueueRecorder;<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>  }<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span><a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>  /*<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>   * Run init. Sets up wal and starts up all server threads.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>   *<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>   * @param c Extra configuration.<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>   */<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>  protected void handleReportForDutyResponse(final RegionServerStartupResponse c)<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>  throws IOException {<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>    try {<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>      boolean updateRootDir = false;<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span>      for (NameStringPair e : c.getMapEntriesList()) {<a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>        String key = e.getName();<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>        // The hostname the master sees us as.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>        if (key.equals(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER)) {<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>          String hostnameFromMasterPOV = e.getValue();<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>          this.serverName = ServerName.valueOf(hostnameFromMasterPOV, rpcServices.isa.getPort(),<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>              this.startcode);<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>          if (!StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>              !hostnameFromMasterPOV.equals(useThisHostnameInstead)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>                this.useThisHostnameInstead + ", but now=" + hostnameFromMasterPOV;<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>            LOG.error(msg);<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>            throw new IOException(msg);<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>          }<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>          if (StringUtils.isBlank(useThisHostnameInstead) &amp;&amp;<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>              !hostnameFromMasterPOV.equals(rpcServices.isa.getHostName())) {<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>            String msg = "Master passed us a different hostname to use; was=" +<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>                rpcServices.isa.getHostName() + ", but now=" + hostnameFromMasterPOV;<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>            LOG.error(msg);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>          }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>          continue;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>        }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span><a name="line.1562"></a>
+<span class="sourceLineNo">1563</span>        String value = e.getValue();<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>        if (key.equals(HConstants.HBASE_DIR)) {<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>          if (value != null &amp;&amp; !value.equals(conf.get(HConstants.HBASE_DIR))) {<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>            updateRootDir = true;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>          }<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        }<a name="line.1568"></a>
 <span class="sourceLineNo">1569</span><a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1573"></a>
+<span class="sourceLineNo">1570</span>        if (LOG.isDebugEnabled()) {<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>          LOG.debug("Config from master: " + key + "=" + value);<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>        }<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        this.conf.set(key, value);<a name="line.1573"></a>
 <span class="sourceLineNo">1574</span>      }<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span><a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>      // Save it in a file, this will allow to see if we crash<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span><a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>      setupWALAndReplication();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      final MetricsTable metricsTable =<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      pauseMonitor.start();<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span><a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>        startServices();<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      }<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      // or make sense of it.<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      startReplicationService();<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span><a name="line.1598"></a>
-<span class="sourceLineNo">1599</span><a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      // Set up ZK<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>          ", sessionid=0x" +<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span><a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>      // Wake up anyone waiting for this server to online<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>      synchronized (online) {<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>        online.set(true);<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>        online.notifyAll();<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>    } catch (Throwable e) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>      stop("Failed initialization");<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>          "Region server startup failed");<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    } finally {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>      sleeper.skipSleepCycle();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>  }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span><a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      // it.<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>      // init the chunkCreator<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>    }<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>  }<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span><a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>  private void startHeapMemoryManager() {<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>    if (this.blockCache != null) {<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>      this.hMemManager =<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      this.hMemManager.start(getChoreService());<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>    }<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>  }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>  }<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span><a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>  }<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span><a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>  @Override<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>    return regionServerAccounting;<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>  }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span><a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>  /**<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>   * @param r Region to get RegionLoad for.<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>   * @return RegionLoad instance.<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>   */<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>    int stores = 0;<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    int storefiles = 0;<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>    int storeRefCount = 0;<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>    int storeUncompressedSizeMB = 0;<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>    int storefileSizeMB = 0;<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>    long storefileIndexSizeKB = 0;<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>    int rootLevelIndexSizeKB = 0;<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>    int totalStaticIndexSizeKB = 0;<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>    int totalStaticBloomSizeKB = 0;<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    long totalCompactingKVs = 0;<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>    long currentCompactedKVs = 0;<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>    stores += storeList.size();<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>    for (HStore store : storeList) {<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>      storefiles += store.getStorefilesCount();<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>      storeRefCount += currentStoreRefCount;<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>      if (progress != null) {<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>      }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>    }<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span><a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>    if (regionLoadBldr == null) {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>    }<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>    if (regionSpecifier == null) {<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1721"></a>
+<span class="sourceLineNo">1575</span>      // Set our ephemeral znode up in zookeeper now we have a name.<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      createMyEphemeralNode();<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span><a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>      if (updateRootDir) {<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>        // initialize file system by the config fs.defaultFS and hbase.rootdir from master<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>        initializeFileSystem();<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      }<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span><a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>      // hack! Maps DFSClient =&gt; RegionServer for logs.  HDFS made this<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      // config param for task trackers, but we can piggyback off of it.<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      if (this.conf.get("mapreduce.task.attempt.id") == null) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        this.conf.set("mapreduce.task.attempt.id", "hb_rs_" + this.serverName.toString());<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      }<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span><a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      // Save it in a file, this will allow to see if we crash<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>      ZNodeClearer.writeMyEphemeralNodeOnDisk(getMyEphemeralNodePath());<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      // This call sets up an initialized replication and WAL. Later we start it up.<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      setupWALAndReplication();<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      // Init in here rather than in constructor after thread name has been set<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>      final MetricsTable metricsTable =<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>          new MetricsTable(new MetricsTableWrapperAggregateImpl(this));<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      this.metricsRegionServerImpl = new MetricsRegionServerWrapperImpl(this);<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      this.metricsRegionServer = new MetricsRegionServer(<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>          metricsRegionServerImpl, conf, metricsTable);<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      // Now that we have a metrics source, start the pause monitor<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      this.pauseMonitor = new JvmPauseMonitor(conf, getMetrics().getMetricsSource());<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>      pauseMonitor.start();<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span><a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      // There is a rare case where we do NOT want services to start. Check config.<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>      if (getConfiguration().getBoolean("hbase.regionserver.workers", true)) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>        startServices();<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>      }<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>      // In here we start up the replication Service. Above we initialized it. TODO. Reconcile.<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      // or make sense of it.<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      startReplicationService();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span><a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      // Set up ZK<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>      LOG.info("Serving as " + this.serverName + ", RpcServer on " + rpcServices.isa +<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>          ", sessionid=0x" +<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>          Long.toHexString(this.zooKeeper.getRecoverableZooKeeper().getSessionId()));<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span><a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>      // Wake up anyone waiting for this server to online<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      synchronized (online) {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        online.set(true);<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>        online.notifyAll();<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      }<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>    } catch (Throwable e) {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      stop("Failed initialization");<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      throw convertThrowableToIOE(cleanup(e, "Failed init"),<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>          "Region server startup failed");<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>    } finally {<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>      sleeper.skipSleepCycle();<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>  }<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span><a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>  protected void initializeMemStoreChunkCreator() {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    if (MemStoreLAB.isEnabled(conf)) {<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>      // MSLAB is enabled. So initialize MemStoreChunkPool<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>      // By this time, the MemstoreFlusher is already initialized. We can get the global limits from<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>      // it.<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>      Pair&lt;Long, MemoryType&gt; pair = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>      long globalMemStoreSize = pair.getFirst();<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>      boolean offheap = this.regionServerAccounting.isOffheap();<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      // When off heap memstore in use, take full area for chunk pool.<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>      float poolSizePercentage = offheap ? 1.0F :<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        conf.getFloat(MemStoreLAB.CHUNK_POOL_MAXSIZE_KEY, MemStoreLAB.POOL_MAX_SIZE_DEFAULT);<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>      float initialCountPercentage = conf.getFloat(MemStoreLAB.CHUNK_POOL_INITIALSIZE_KEY,<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        MemStoreLAB.POOL_INITIAL_SIZE_DEFAULT);<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>      int chunkSize = conf.getInt(MemStoreLAB.CHUNK_SIZE_KEY, MemStoreLAB.CHUNK_SIZE_DEFAULT);<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>      float indexChunkSizePercent = conf.getFloat(MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_KEY,<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        MemStoreLAB.INDEX_CHUNK_SIZE_PERCENTAGE_DEFAULT);<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>      // init the chunkCreator<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>      ChunkCreator.initialize(chunkSize, offheap, globalMemStoreSize, poolSizePercentage,<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>        initialCountPercentage, this.hMemManager, indexChunkSizePercent);<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>    }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>  }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span><a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>  private void startHeapMemoryManager() {<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>    if (this.blockCache != null) {<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>      this.hMemManager =<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>          new HeapMemoryManager(this.blockCache, this.cacheFlusher, this, regionServerAccounting);<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      this.hMemManager.start(getChoreService());<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>  }<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span><a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>  private void createMyEphemeralNode() throws KeeperException {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>    RegionServerInfo.Builder rsInfo = RegionServerInfo.newBuilder();<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    rsInfo.setInfoPort(infoServer != null ? infoServer.getPort() : -1);<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>    rsInfo.setVersionInfo(ProtobufUtil.getVersionInfo());<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    byte[] data = ProtobufUtil.prependPBMagic(rsInfo.build().toByteArray());<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    ZKUtil.createEphemeralNodeAndWatch(this.zooKeeper, getMyEphemeralNodePath(), data);<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>  }<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span><a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>  private void deleteMyEphemeralNode() throws KeeperException {<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>    ZKUtil.deleteNode(this.zooKeeper, getMyEphemeralNodePath());<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>  }<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span><a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>  @Override<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>  public RegionServerAccounting getRegionServerAccounting() {<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>    return regionServerAccounting;<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span>  }<a name="line.1677"></a>
+<span class="sourceLineNo">1678</span><a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /**<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>   * @param r Region to get RegionLoad for.<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>   * @param regionLoadBldr the RegionLoad.Builder, can be null<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>   * @param regionSpecifier the RegionSpecifier.Builder, can be null<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>   * @return RegionLoad instance.<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>   */<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  RegionLoad createRegionLoad(final HRegion r, RegionLoad.Builder regionLoadBldr,<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>      RegionSpecifier.Builder regionSpecifier) throws IOException {<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>    byte[] name = r.getRegionInfo().getRegionName();<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>    int stores = 0;<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>    int storefiles = 0;<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>    int storeRefCount = 0;<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>    int maxCompactedStoreFileRefCount = 0;<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>    int storeUncompressedSizeMB = 0;<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    int storefileSizeMB = 0;<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>    int memstoreSizeMB = (int) (r.getMemStoreDataSize() / 1024 / 1024);<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>    long storefileIndexSizeKB = 0;<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>    int rootLevelIndexSizeKB = 0;<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>    int totalStaticIndexSizeKB = 0;<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>    int totalStaticBloomSizeKB = 0;<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>    long totalCompactingKVs = 0;<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>    long currentCompactedKVs = 0;<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    List&lt;HStore&gt; storeList = r.getStores();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>    stores += storeList.size();<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>    for (HStore store : storeList) {<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>      storefiles += store.getStorefilesCount();<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>      int currentStoreRefCount = store.getStoreRefCount();<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>      storeRefCount += currentStoreRefCount;<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>      int currentMaxCompactedStoreFileRefCount = store.getMaxCompactedStoreFileRefCount();<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>      maxCompactedStoreFileRefCount = Math.max(maxCompactedStoreFileRefCount,<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        currentMaxCompactedStoreFileRefCount);<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>      storeUncompressedSizeMB += (int) (store.getStoreSizeUncompressed() / 1024 / 1024);<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>      storefileSizeMB += (int) (store.getStorefilesSize() / 1024 / 1024);<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>      //TODO: storefileIndexSizeKB is same with rootLevelIndexSizeKB?<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>      storefileIndexSizeKB += store.getStorefilesRootLevelIndexSize() / 1024;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>      CompactionProgress progress = store.getCompactionProgress();<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (progress != null) {<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        totalCompactingKVs += progress.getTotalCompactingKVs();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        currentCompactedKVs += progress.currentCompactedKVs;<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>      }<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>      rootLevelIndexSizeKB += (int) (store.getStorefilesRootLevelIndexSize() / 1024);<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>      totalStaticIndexSizeKB += (int) (store.getTotalStaticIndexSize() / 1024);<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>      totalStaticBloomSizeKB += (int) (store.getTotalStaticBloomSize() / 1024);<a name="line.1721"></a>
 <span class="sourceLineNo">1722</span>    }<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>      .setStores(stores)<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>      .setStorefiles(storefiles)<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span>      .setStoreRefCount(storeRefCount)<a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      .setDataLocality(dataLocality)<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span><a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>    return regionLoadBldr.build();<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>  }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span><a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    userLoadBldr.setUserName(user);<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>            .setHostName(clientMetrics.getHostName())<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>    return userLoadBldr.build();<a name="line.1764"></a>
+<span class="sourceLineNo">1723</span><a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>    HDFSBlocksDistribution hdfsBd = r.getHDFSBlocksDistribution();<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>    float dataLocality = hdfsBd.getBlockLocalityIndex(serverName.getHostname());<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>    float dataLocalityForSsd = hdfsBd.getBlockLocalityIndexForSsd(serverName.getHostname());<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>    long blocksTotalWeight = hdfsBd.getUniqueBlocksTotalWeight();<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>    long blocksLocalWeight = hdfsBd.getBlocksLocalWeight(serverName.getHostname());<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>    long blocksLocalWithSsdWeight = hdfsBd.getBlocksLocalWithSsdWeight(serverName.getHostname());<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>    if (regionLoadBldr == null) {<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      regionLoadBldr = RegionLoad.newBuilder();<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>    }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    if (regionSpecifier == null) {<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      regionSpecifier = RegionSpecifier.newBuilder();<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>    }<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>    regionSpecifier.setType(RegionSpecifierType.REGION_NAME);<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>    regionSpecifier.setValue(UnsafeByteOperations.unsafeWrap(name));<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>    regionLoadBldr.setRegionSpecifier(regionSpecifier.build())<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>      .setStores(stores)<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>      .setStorefiles(storefiles)<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>      .setStoreRefCount(storeRefCount)<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      .setMaxCompactedStoreFileRefCount(maxCompactedStoreFileRefCount)<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>      .setStoreUncompressedSizeMB(storeUncompressedSizeMB)<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      .setStorefileSizeMB(storefileSizeMB)<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>      .setMemStoreSizeMB(memstoreSizeMB)<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>      .setStorefileIndexSizeKB(storefileIndexSizeKB)<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      .setRootIndexSizeKB(rootLevelIndexSizeKB)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>      .setTotalStaticIndexSizeKB(totalStaticIndexSizeKB)<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>      .setTotalStaticBloomSizeKB(totalStaticBloomSizeKB)<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>      .setReadRequestsCount(r.getReadRequestsCount())<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>      .setCpRequestsCount(r.getCpRequestsCount())<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>      .setFilteredReadRequestsCount(r.getFilteredReadRequestsCount())<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>      .setWriteRequestsCount(r.getWriteRequestsCount())<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>      .setTotalCompactingKVs(totalCompactingKVs)<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      .setCurrentCompactedKVs(currentCompactedKVs)<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      .setDataLocality(dataLocality)<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      .setDataLocalityForSsd(dataLocalityForSsd)<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      .setBlocksLocalWeight(blocksLocalWeight)<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      .setBlocksLocalWithSsdWeight(blocksLocalWithSsdWeight)<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>      .setBlocksTotalWeight(blocksTotalWeight)<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      .setLastMajorCompactionTs(r.getOldestHfileTs(true));<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    r.setCompleteSequenceId(regionLoadBldr);<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span><a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    return regionLoadBldr.build();<a name="line.1764"></a>
 <span class="sourceLineNo">1765</span>  }<a name="line.1765"></a>
 <span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>  }<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span><a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>  /**<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>   */<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>    private final HRegionServer instance;<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>    private final int majorCompactPriority;<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>    // immediately upon region server startup<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>    private long iteration = 1;<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span><a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>      this.instance = h;<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span><a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>      /* MajorCompactPriority is configurable.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>       * If not set, the compaction will use default priority.<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>       */<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>              DEFAULT_PRIORITY);<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
+<span class="sourceLineNo">1767</span>  private UserLoad createUserLoad(String user, MetricsUserSource userSource) {<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>    UserLoad.Builder userLoadBldr = UserLoad.newBuilder();<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>    userLoadBldr.setUserName(user);<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>    userSource.getClientMetrics().values().stream().map(<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>      clientMetrics -&gt; ClusterStatusProtos.ClientMetrics.newBuilder()<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>            .setHostName(clientMetrics.getHostName())<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>            .setWriteRequestsCount(clientMetrics.getWriteRequestsCount())<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>            .setFilteredRequestsCount(clientMetrics.getFilteredReadRequests())<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>            .setReadRequestsCount(clientMetrics.getReadRequestsCount()).build())<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>        .forEach(userLoadBldr::addClientMetrics);<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>    return userLoadBldr.build();<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>  }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span><a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>  public RegionLoad createRegionLoad(final String encodedRegionName) throws IOException {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    HRegion r = onlineRegions.get(encodedRegionName);<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>    return r != null ? createRegionLoad(r, null, null) : null;<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>  }<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span><a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>  /**<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>   * Inner class that runs on a long period checking if regions need compaction.<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>   */<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>  private static class CompactionChecker extends ScheduledChore {<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>    private final HRegionServer instance;<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>    private final int majorCompactPriority;<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    private final static int DEFAULT_PRIORITY = Integer.MAX_VALUE;<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>    //Iteration is 1-based rather than 0-based so we don't check for compaction<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span>    // immediately upon region server startup<a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>    private long iteration = 1;<a name="line.1794"></a>
 <span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    @Override<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    protected void chore() {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>        // Skip compaction if region is read only<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>        if (r == null || r.isReadOnly()) {<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>          continue;<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>        }<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span><a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>        HRegion hr = (HRegion) r;<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        for (HStore s : hr.stores.values()) {<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>          try {<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>            assert multiplier &gt; 0;<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>            if (iteration % multiplier != 0) {<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>              continue;<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>            }<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>            if (s.needsCompaction()) {<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>                getName() + " requests compaction");<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>              s.triggerMajorCompaction();<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>                    getName() + " requests major compaction; use default priority",<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>                    Store.NO_PRIORITY,<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>              } else {<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>              }<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>            }<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>          } catch (IOException e) {<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>          }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>        }<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      }<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>  }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span><a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>    private final HRegionServer server;<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>    private final long rangeOfDelayMs;<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span><a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span>      this.server = server;<a name="line.1847"></a>
-<span class="sourceLineNo">1848</span><a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>    }<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span><a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>    @Override<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    protected void chore() {<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>        if (r == null) continue;<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>          if (requester != null) {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>                  randomDelay);<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span>            }<a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>          }<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>        }<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>      }<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>    }<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>  }<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span><a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  /**<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>   * method is designed mostly to be useful in tests.<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>   *<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span>   * @return true if online, false if not.<a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>   */<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>  public boolean isOnline() {<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    return online.get();<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  }<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span><a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  /**<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>   * be hooked up to WAL.<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>   */<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span>  private void setupWALAndReplication() throws IOException {<a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>    WALFactory factory =<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span><a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>      LOG.debug("logDir={}", logDir);<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>      if (this.walFs.exists(logDir)) {<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>        throw new RegionServerRunningException(<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>      }<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span>      // region servers.<a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>      }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>        factory.getWALProvider());<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>    }<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>    this.walFactory = factory;<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  }<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span><a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  /**<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span>   * Start up replication source and sink handlers.<a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>   */<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>  private void startReplicationService() throws IOException {<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>    if (this.replicationSourceHandler == this.replicationSinkHandler &amp;&amp;<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>        this.replicationSourceHandler != null) {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>    } else {<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span>      if (this.replicationSourceHandler != null) {<a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>      }<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>      if (this.replicationSinkHandler != null) {<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>      }<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>    }<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>  }<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span><a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>  /**<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>   * @return Master address tracker instance.<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span>   */<a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>    return this.masterAddressTracker;<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>  }<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span><a name="line.1943"></a>
-<span class="sourceLineNo">1944</span>  /**<a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>   * registered with the Master.<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>   * hosting server. Worker logs the exception and exits.<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>   */<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>  private void startServices() throws IOException {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>      initializeThreads();<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    }<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span>    this.secureBulkLoadManager.start();<a name="line.1963"></a>
-<span class="sourceLineNo">1964</span><a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>    // Health checker thread.<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>    if (isHealthCheckerConfigured()) {<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    }<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>    // Executor status collect thread.<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>    }<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span><a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>    this.walRoller = new LogRoller(this);<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span><a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>    int cleanerInterval =<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>    this.compactedFileDischarger =<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span><a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>    // Start executor services<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    }<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>    // Start the threads for compacted files discharger<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>    }<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span><a name="line.2025"></a>
-<span class="sourceLineNo">2026</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>        uncaughtExceptionHandler);<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>    if (this.cacheFlusher != null) {<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2029"></a>
+<span class="sourceLineNo">1796</span>    CompactionChecker(final HRegionServer h, final int sleepTime, final Stoppable stopper) {<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>      super("CompactionChecker", stopper, sleepTime);<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>      this.instance = h;<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      LOG.info(this.getName() + " runs every " + Duration.ofMillis(sleepTime));<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span><a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>      /* MajorCompactPriority is configurable.<a name="line.1801"></a>
+<span class="sourceLineNo">1802</span>       * If not set, the compaction will use default priority.<a name="line.1802"></a>
+<span class="sourceLineNo">1803</span>       */<a name="line.1803"></a>
+<span class="sourceLineNo">1804</span>      this.majorCompactPriority = this.instance.conf.<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>          getInt("hbase.regionserver.compactionChecker.majorCompactPriority",<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>              DEFAULT_PRIORITY);<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>    }<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span><a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>    @Override<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>    protected void chore() {<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      for (Region r : this.instance.onlineRegions.values()) {<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>        // Skip compaction if region is read only<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>        if (r == null || r.isReadOnly()) {<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>          continue;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>        }<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span><a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>        HRegion hr = (HRegion) r;<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>        for (HStore s : hr.stores.values()) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          try {<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>            long multiplier = s.getCompactionCheckMultiplier();<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>            assert multiplier &gt; 0;<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>            if (iteration % multiplier != 0) {<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>              continue;<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>            }<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>            if (s.needsCompaction()) {<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>              // Queue a compaction. Will recognize if major is needed.<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>              this.instance.compactSplitThread.requestSystemCompaction(hr, s,<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>                getName() + " requests compaction");<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>            } else if (s.shouldPerformMajorCompaction()) {<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>              s.triggerMajorCompaction();<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>              if (majorCompactPriority == DEFAULT_PRIORITY ||<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>                  majorCompactPriority &gt; hr.getCompactPriority()) {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>                    getName() + " requests major compaction; use default priority",<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>                    Store.NO_PRIORITY,<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>                CompactionLifeCycleTracker.DUMMY, null);<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>              } else {<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>                this.instance.compactSplitThread.requestCompaction(hr, s,<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>                    getName() + " requests major compaction; use configured priority",<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>                    this.majorCompactPriority, CompactionLifeCycleTracker.DUMMY, null);<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span>              }<a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>            }<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>          } catch (IOException e) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>            LOG.warn("Failed major compaction check on " + r, e);<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>          }<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        }<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>      }<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>      iteration = (iteration == Long.MAX_VALUE) ? 0 : (iteration + 1);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>    }<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span>  }<a name="line.1850"></a>
+<span class="sourceLineNo">1851</span><a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>  private static class PeriodicMemStoreFlusher extends ScheduledChore {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    private final HRegionServer server;<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    private final static int RANGE_OF_DELAY = 5 * 60; // 5 min in seconds<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>    private final static int MIN_DELAY_TIME = 0; // millisec<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>    private final long rangeOfDelayMs;<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span><a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    PeriodicMemStoreFlusher(int cacheFlushInterval, final HRegionServer server) {<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>      super("MemstoreFlusherChore", server, cacheFlushInterval);<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span>      this.server = server;<a name="line.1860"></a>
+<span class="sourceLineNo">1861</span><a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      final long configuredRangeOfDelay = server.getConfiguration().getInt(<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>          "hbase.regionserver.periodicmemstoreflusher.rangeofdelayseconds", RANGE_OF_DELAY);<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      this.rangeOfDelayMs = TimeUnit.SECONDS.toMillis(configuredRangeOfDelay);<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>    }<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>    @Override<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>    protected void chore() {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>      final StringBuilder whyFlush = new StringBuilder();<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>      for (HRegion r : this.server.onlineRegions.values()) {<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>        if (r == null) continue;<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>        if (r.shouldFlush(whyFlush)) {<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span>          FlushRequester requester = server.getFlushRequester();<a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>          if (requester != null) {<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>            long randomDelay = RandomUtils.nextLong(0, rangeOfDelayMs) + MIN_DELAY_TIME;<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>            //Throttle the flushes by putting a delay. If we don't throttle, and there<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>            //is a balanced write-load on the regions in a table, we might end up<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>            //overwhelming the filesystem with too many flushes at once.<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>            if (requester.requestDelayedFlush(r, randomDelay)) {<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>              LOG.info("{} requesting flush of {} because {} after random delay {} ms",<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span>                  getName(), r.getRegionInfo().getRegionNameAsString(),  whyFlush.toString(),<a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>                  randomDelay);<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>            }<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>          }<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span>        }<a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>      }<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>    }<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>  }<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span><a name="line.1889"></a>
+<span class="sourceLineNo">1890</span>  /**<a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>   * Report the status of the server. A server is online once all the startup is<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>   * completed (setting up filesystem, starting executorService threads, etc.). This<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>   * method is designed mostly to be useful in tests.<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>   *<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span>   * @return true if online, false if not.<a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>   */<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public boolean isOnline() {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    return online.get();<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>  }<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span><a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>  /**<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>   * Setup WAL log and replication if enabled. Replication setup is done in here because it wants to<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>   * be hooked up to WAL.<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span>   */<a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>  private void setupWALAndReplication() throws IOException {<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>    boolean isMasterNoTableOrSystemTableOnly = this instanceof HMaster &amp;&amp;<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>        !LoadBalancer.isMasterCanHostUserRegions(conf);<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>    WALFactory factory =<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>        new WALFactory(conf, serverName.toString(), !isMasterNoTableOrSystemTableOnly);<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>    if (!isMasterNoTableOrSystemTableOnly) {<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>      // TODO Replication make assumptions here based on the default filesystem impl<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span>      Path oldLogDir = new Path(walRootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>      String logName = AbstractFSWALProvider.getWALDirectoryName(this.serverName.toString());<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span><a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>      Path logDir = new Path(walRootDir, logName);<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span>      LOG.debug("logDir={}", logDir);<a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>      if (this.walFs.exists(logDir)) {<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>        throw new RegionServerRunningException(<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>            "Region server has already created directory at " + this.serverName.toString());<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>      }<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>      // Always create wal directory as now we need this when master restarts to find out the live<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>      // region servers.<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>      if (!this.walFs.mkdirs(logDir)) {<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span>        throw new IOException("Can not create wal directory " + logDir);<a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>      }<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>      // Instantiate replication if replication enabled. Pass it the log directories.<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>      createNewReplicationInstance(conf, this, this.walFs, logDir, oldLogDir,<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>        factory.getWALProvider());<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>    }<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>    this.walFactory = factory;<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span>  }<a name="line.1931"></a>
+<span class="sourceLineNo">1932</span><a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>  /**<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>   * Start up replication source and sink handlers.<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>   */<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>  private void startReplicationService() throws IOException {<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>      this.replicationSourceHandler.startReplicationService();<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>    } else {<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>      if (this.replicationSourceHandler != null) {<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>        this.replicationSourceHandler.startReplicationService();<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span>      }<a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>      if (this.replicationSinkHandler != null) {<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>        this.replicationSinkHandler.startReplicationService();<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>      }<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>    }<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span>  }<a name="line.1947"></a>
+<span class="sourceLineNo">1948</span><a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  /**<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>   * @return Master address tracker instance.<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>   */<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span>  public MasterAddressTracker getMasterAddressTracker() {<a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>    return this.masterAddressTracker;<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>  }<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span><a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>  /**<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>   * Start maintenance Threads, Server, Worker and lease checker threads.<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span>   * Start all threads we need to run. This is called after we've successfully<a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>   * registered with the Master.<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>   * Install an UncaughtExceptionHandler that calls abort of RegionServer if we<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>   * get an unhandled exception. We cannot set the handler on all threads.<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>   * Server's internal Listener thread is off limits. For Server, if an OOME, it<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>   * waits a while then retries. Meantime, a flush or a compaction that tries to<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>   * run should trigger same critical condition and the shutdown will run. On<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>   * its way out, this server will shut down Server. Leases are sort of<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span>   * inbetween. It has an internal thread that while it inherits from Chore, it<a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>   * keeps its own internal stop mechanism so needs to be stopped by this<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>   * hosting server. Worker logs the exception and exits.<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>   */<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>  private void startServices() throws IOException {<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>    if (!isStopped() &amp;&amp; !isAborted()) {<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>      initializeThreads();<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>    }<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>    this.secureBulkLoadManager = new SecureBulkLoadManager(this.conf, asyncClusterConnection);<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>    this.secureBulkLoadManager.start();<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span><a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    // Health checker thread.<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>    if (isHealthCheckerConfigured()) {<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span>      int sleepTime = this.conf.getInt(HConstants.HEALTH_CHORE_WAKE_FREQ,<a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>      HConstants.DEFAULT_THREAD_WAKE_FREQUENCY);<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>      healthCheckChore = new HealthCheckChore(sleepTime, this, getConfiguration());<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    }<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>    // Executor status collect thread.<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span>    if (this.conf.getBoolean(HConstants.EXECUTOR_STATUS_COLLECT_ENABLED,<a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>        HConstants.DEFAULT_EXECUTOR_STATUS_COLLECT_ENABLED)) {<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>      int sleepTime = this.conf.getInt(ExecutorStatusChore.WAKE_FREQ,<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>          ExecutorStatusChore.DEFAULT_WAKE_FREQ);<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>      executorStatusChore = new ExecutorStatusChore(sleepTime, this, this.getExecutorService(),<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>          this.metricsRegionServer.getMetricsSource());<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>    }<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span><a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>    this.walRoller = new LogRoller(this);<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, conf);<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>    this.procedureResultReporter = new RemoteProcedureResultReporter(this);<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span><a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>    // Create the CompactedFileDischarger chore executorService. This chore helps to<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>    // remove the compacted files that will no longer be used in reads.<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>    // Default is 2 mins. The default value for TTLCleaner is 5 mins so we set this to<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>    // 2 mins so that compacted files can be archived before the TTLCleaner runs<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>    int cleanerInterval =<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>      conf.getInt("hbase.hfile.compaction.discharger.interval", 2 * 60 * 1000);<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>    this.compactedFileDischarger =<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>      new CompactedHFilesDischarger(cleanerInterval, this, this);<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>    choreService.scheduleChore(compactedFileDischarger);<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span><a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>    // Start executor services<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_REGION,<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>        conf.getInt("hbase.regionserver.executor.openregion.threads", 3));<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_META,<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>        conf.getInt("hbase.regionserver.executor.openmeta.threads", 1));<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    this.executorService.startExecutorService(ExecutorType.RS_OPEN_PRIORITY_REGION,<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>        conf.getInt("hbase.regionserver.executor.openpriorityregion.threads", 3));<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_REGION,<a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>        conf.getInt("hbase.regionserver.executor.closeregion.threads", 3));<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    this.executorService.startExecutorService(ExecutorType.RS_CLOSE_META,<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>        conf.getInt("hbase.regionserver.executor.closemeta.threads", 1));<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    if (conf.getBoolean(StoreScanner.STORESCANNER_PARALLEL_SEEK_ENABLE, false)) {<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>      this.executorService.startExecutorService(ExecutorType.RS_PARALLEL_SEEK,<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>          conf.getInt("hbase.storescanner.parallel.seek.threads", 10));<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>    }<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>    this.executorService.startExecutorService(ExecutorType.RS_LOG_REPLAY_OPS, conf.getInt(<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>        HBASE_SPLIT_WAL_MAX_SPLITTER, DEFAULT_HBASE_SPLIT_WAL_MAX_SPLITTER));<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>    // Start the threads for compacted files discharger<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>    this.executorService.startExecutorService(ExecutorType.RS_COMPACTED_FILES_DISCHARGER,<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>        conf.getInt(CompactionConfiguration.HBASE_HFILE_COMPACTION_DISCHARGER_THREAD_COUNT, 10));<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    if (ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(conf)) {<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>      this.executorService.startExecutorService(ExecutorType.RS_REGION_REPLICA_FLUSH_OPS,<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>          conf.getInt("hbase.regionserver.region.replica.flusher.threads",<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span>              conf.getInt("hbase.regionserver.executor.openregion.threads", 3)));<a name="line.2029"></a>
 <span class="sourceLineNo">2030</span>    }<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span><a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>    if (this.compactionChecker != null) {<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>      choreService.scheduleChore(compactionChecker);<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>    }<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>    if (this.periodicFlusher != null) {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span>    }<a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>    if (this.healthCheckChore != null) {<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2041"></a>
+<span class="sourceLineNo">2031</span>    this.executorService.startExecutorService(ExecutorType.RS_REFRESH_PEER,<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>      conf.getInt("hbase.regionserver.executor.refresh.peer.threads", 2));<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>    this.executorService.startExecutorService(ExecutorType.RS_REPLAY_SYNC_REPLICATION_WAL,<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>      conf.getInt("hbase.regionserver.executor.replay.sync.replication.wal.threads", 1));<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>    this.executorService.startExecutorService(ExecutorType.RS_SWITCH_RPC_THROTTLE,<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>      conf.getInt("hbase.regionserver.executor.switch.rpc.throttle.threads", 1));<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span><a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>    Threads.setDaemonThreadRunning(this.walRoller, getName() + ".logRoller",<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>        uncaughtExceptionHandler);<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>    if (this.cacheFlusher != null) {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>      this.cacheFlusher.start(uncaughtExceptionHandler);<a name="line.2041"></a>
 <span class="sourceLineNo">2042</span>    }<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>    if (this.executorStatusChore != null) {<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>    }<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>    if (this.nonceManagerChore != null) {<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2047"></a>
+<span class="sourceLineNo">2043</span>    Threads.setDaemonThreadRunning(this.procedureResultReporter,<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>      getName() + ".procedureResultReporter", uncaughtExceptionHandler);<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span><a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>    if (this.compactionChecker != null) {<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>      choreService.scheduleChore(compactionChecker);<a name="line.2047"></a>
 <span class="sourceLineNo">2048</span>    }<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>    if (this.storefileRefresher != null) {<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2050"></a>
+<span class="sourceLineNo">2049</span>    if (this.periodicFlusher != null) {<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>      choreService.scheduleChore(periodicFlusher);<a name="line.2050"></a>
 <span class="sourceLineNo">2051</span>    }<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>    if (this.fsUtilizationChore != null) {<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2053"></a>
+<span class="sourceLineNo">2052</span>    if (this.healthCheckChore != null) {<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>      choreService.scheduleChore(healthCheckChore);<a name="line.2053"></a>
 <span class="sourceLineNo">2054</span>    }<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2056"></a>
+<span class="sourceLineNo">2055</span>    if (this.executorStatusChore != null) {<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>      choreService.scheduleChore(executorStatusChore);<a name="line.2056"></a>
 <span class="sourceLineNo">2057</span>    }<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span><a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>    // an unhandled exception, it will just exit.<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>        uncaughtExceptionHandler);<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span><a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>    // Create the log splitting worker and start it<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2065"></a>
-<span class="sourceLineNo">2066</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>      splitLogWorker.start();<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>      LOG.debug("SplitLogWorker started");<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>    }<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span><a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>    // Memstore services.<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>    startHeapMemoryManager();<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    // Call it after starting HeapMemoryManager.<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>    initializeMemStoreChunkCreator();<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span>  }<a name="line.2086"></a>
-<span class="sourceLineNo">2087</span><a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>  private void initializeThreads() {<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>    // Cache flushing thread.<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span><a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>    // Compaction thread<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span><a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span><a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>    if (isSlowLogTableEnabled) {<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>      // default chore duration: 10 min<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2106"></a>
-<span class="sourceLineNo">2107</span>    }<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span><a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>    if (this.nonceManager != null) {<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>    }<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span><a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>    // Setup the Quota Manager<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span><a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span>    }<a name="line.2120"></a>
-<span class="sourceLineNo">2121</span><a name="line.2121"></a>
-<span class="sourceLineNo">2122</span><a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>    boolean onlyMetaRefresh = false;<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>    if (storefileRefreshPeriod == 0) {<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>      onlyMetaRefresh = true;<a name="line.2131"></a>
+<span class="sourceLineNo">2058</span>    if (this.nonceManagerChore != null) {<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>      choreService.scheduleChore(nonceManagerChore);<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>    }<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>    if (this.storefileRefresher != null) {<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      choreService.scheduleChore(storefileRefresher);<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>    }<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>    if (this.fsUtilizationChore != null) {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>      choreService.scheduleChore(fsUtilizationChore);<a name="line.2065"></a>
+<span class="sourceLineNo">2066</span>    }<a name="line.2066"></a>
+<span class="sourceLineNo">2067</span>    if (this.slowLogTableOpsChore != null) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>      choreService.scheduleChore(slowLogTableOpsChore);<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span><a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>    // Leases is not a Thread. Internally it runs a daemon thread. If it gets<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    // an unhandled exception, it will just exit.<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>    Threads.setDaemonThreadRunning(this.leaseManager, getName() + ".leaseChecker",<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span>        uncaughtExceptionHandler);<a name="line.2074"></a>
+<span class="sourceLineNo">2075</span><a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>    // Create the log splitting worker and start it<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>    // set a smaller retries to fast fail otherwise splitlogworker could be blocked for<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>    // quite a while inside Connection layer. The worker won't be available for other<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>    // tasks even after current task is preempted after a split task times out.<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>    Configuration sinkConf = HBaseConfiguration.create(conf);<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_RETRIES_NUMBER,<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>        conf.getInt("hbase.log.replay.retries.number", 8)); // 8 retries take about 23 seconds<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>    sinkConf.setInt(HConstants.HBASE_RPC_TIMEOUT_KEY,<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>        conf.getInt("hbase.log.replay.rpc.timeout", 30000)); // default 30 seconds<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>    sinkConf.setInt(HConstants.HBASE_CLIENT_SERVERSIDE_RETRIES_MULTIPLIER, 1);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>    if (this.csm != null &amp;&amp; conf.getBoolean(HBASE_SPLIT_WAL_COORDINATED_BY_ZK,<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>      DEFAULT_HBASE_SPLIT_COORDINATED_BY_ZK)) {<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>      // SplitLogWorker needs csm. If none, don't start this.<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span>      this.splitLogWorker = new SplitLogWorker(sinkConf, this, this, walFactory);<a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>      splitLogWorker.start();<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>      LOG.debug("SplitLogWorker started");<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>    }<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span><a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>    // Memstore services.<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>    startHeapMemoryManager();<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>    // Call it after starting HeapMemoryManager.<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    initializeMemStoreChunkCreator();<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>  }<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span><a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>  private void initializeThreads() {<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    // Cache flushing thread.<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>    this.cacheFlusher = new MemStoreFlusher(conf, this);<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span><a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>    // Compaction thread<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>    this.compactSplitThread = new CompactSplit(this);<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span><a name="line.2106"></a>
+<span class="sourceLineNo">2107</span>    // Background thread to check for compactions; needed if region has not gotten updates<a name="line.2107"></a>
+<span class="sourceLineNo">2108</span>    // in a while. It will take care of not checking too frequently on store-by-store basis.<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>    this.compactionChecker = new CompactionChecker(this, this.compactionCheckFrequency, this);<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>    this.periodicFlusher = new PeriodicMemStoreFlusher(this.flushCheckFrequency, this);<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>    this.leaseManager = new LeaseManager(this.threadWakeFrequency);<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span><a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>    final boolean isSlowLogTableEnabled = conf.getBoolean(HConstants.SLOW_LOG_SYS_TABLE_ENABLED_KEY,<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>      HConstants.DEFAULT_SLOW_LOG_SYS_TABLE_ENABLED_KEY);<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>    if (isSlowLogTableEnabled) {<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>      // default chore duration: 10 min<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>      final int duration = conf.getInt("hbase.slowlog.systable.chore.duration", 10 * 60 * 1000);<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>      slowLogTableOpsChore = new SlowLogTableOpsChore(this, duration, this.namedQueueRecorder);<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>    }<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span><a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    if (this.nonceManager != null) {<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>      // Create the scheduled chore that cleans up nonces.<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span>      nonceManagerChore = this.nonceManager.createCleanupScheduledChore(this);<a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>    }<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span><a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>    // Setup the Quota Manager<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>    rsQuotaManager = new RegionServerRpcQuotaManager(this);<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    rsSpaceQuotaManager = new RegionServerSpaceQuotaManager(this);<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span><a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>    if (QuotaUtil.isQuotaEnabled(conf)) {<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span>      this.fsUtilizationChore = new FileSystemUtilizationChore(this);<a name="line.2131"></a>
 <span class="sourceLineNo">2132</span>    }<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>          onlyMetaRefresh, this, this);<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>    }<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>    registerConfigurationObservers();<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>  }<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span><a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>  private void registerConfigurationObservers() {<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>    configurationManager.registerObserver(this);<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>  }<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span><a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>  /**<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>   * Puts up the webui.<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>   */<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>  private void putUpWebUI() throws IOException {<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span><a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>    if(this instanceof HMaster) {<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>    }<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>    // -1 is for disabling info server<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>    if (port &lt; 0) {<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>      return;<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>    }<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span><a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>      String msg =<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>          "Failed to start http info server. Address " + addr<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>      LOG.error(msg);<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>      throw new IOException(msg);<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>    }<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>    // check if auto port bind enabled<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>    while (true) {<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>      try {<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>        configureInfoServer();<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>        this.infoServer.start();<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>        break;<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>      } catch (BindException e) {<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>        if (!auto) {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>          // auto bind disabled throw BindException<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>          throw e;<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>        }<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>        // auto bind enabled, try to use another port<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>        port++;<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>      }<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>    }<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>    port = this.infoServer.getPort();<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>  }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span><a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>  /*<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>   * Verify that server is healthy<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>   */<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>  private boolean isHealthy() {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    if (!dataFsOk) {<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>      // File system problem<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>      return false;<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>    }<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>    // Verify that all threads are alive<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>    if (!healthy) {<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>    }<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>    return healthy;<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>  }<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span><a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>  @Override<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    return walFactory.getWALs();<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>  }<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span><a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>  @Override<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>    if (this.walRoller != null) {<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>      this.walRoller.addWAL(wal);<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span>    }<a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>    return wal;<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>  }<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span><a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>  public LogRoller getWalRoller() {<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>    return walRoller;<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>  }<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span><a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>  WALFactory getWalFactory() {<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>    return walFactory;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>  }<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span><a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>  @Override<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>  public Connection getConnection() {<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>    return getAsyncConnection().toConnection();<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>  }<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span><a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>  @Override<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>  public void stop(final String msg) {<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>  }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span><a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>  /**<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>   * Stops the regionserver.<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>   * @param msg Status message<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>   * @param force True if this is a regionserver abort<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>   */<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>    if (!this.stopped) {<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>      if (this.rsHost != null) {<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>        // when forced via abort don't allow CPs to override<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>        try {<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>          this.rsHost.preStop(msg, user);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>        } catch (IOException ioe) {<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>          if (!force) {<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>            return;<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>          }<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>        }<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>      }<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>      this.stopped = true;<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>      LOG.info("STOPPED: " + msg);<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>      // Wakes run() if it is sleeping<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      sleeper.skipSleepCycle();<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>    }<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>  }<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span><a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>  public void waitForServerOnline(){<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>      synchronized (online) {<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        try {<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>          online.wait(msgInterval);<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>        } catch (InterruptedException ie) {<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>          Thread.currentThread().interrupt();<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span>          break;<a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>        }<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>      }<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>    }<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>  }<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span><a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>  @Override<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>    HRegion r = context.getRegion();<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>    long openProcId = context.getOpenProcId();<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>    rpcServices.checkOpen();<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>    // Skip compaction check if region is read only<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>    if (!r.isReadOnly()) {<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>      for (HStore s : r.stores.values()) {<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>        }<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>      }<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>    }<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>      LOG.error(<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      openSeqNum = 0;<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>    }<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span><a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>    // Notify master<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>      throw new IOException(<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    }<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span><a name="line.2325"></a>
-<span class="sourceLineNo">2326</span>    triggerFlushInPrimaryRegion(r);<a name="line.2326"></a>
-<span class="sourceLineNo">2327</span><a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2328"></a>
-<span class="sourceLineNo">2329</span>  }<a name="line.2329"></a>
+<span class="sourceLineNo">2133</span><a name="line.2133"></a>
+<span class="sourceLineNo">2134</span><a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>    boolean onlyMetaRefresh = false;<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>    int storefileRefreshPeriod = conf.getInt(<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>        StorefileRefresherChore.REGIONSERVER_STOREFILE_REFRESH_PERIOD,<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>        StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>    if (storefileRefreshPeriod == 0) {<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>      storefileRefreshPeriod = conf.getInt(<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>          StorefileRefresherChore.REGIONSERVER_META_STOREFILE_REFRESH_PERIOD,<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>          StorefileRefresherChore.DEFAULT_REGIONSERVER_STOREFILE_REFRESH_PERIOD);<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>      onlyMetaRefresh = true;<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>    }<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>    if (storefileRefreshPeriod &gt; 0) {<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>      this.storefileRefresher = new StorefileRefresherChore(storefileRefreshPeriod,<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>          onlyMetaRefresh, this, this);<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>    }<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>    registerConfigurationObservers();<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>  }<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span><a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>  private void registerConfigurationObservers() {<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>    // Registering the compactSplitThread object with the ConfigurationManager.<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>    configurationManager.registerObserver(this.compactSplitThread);<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>    configurationManager.registerObserver(this.rpcServices);<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>    configurationManager.registerObserver(this);<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>  }<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span><a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>  /**<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>   * Puts up the webui.<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>   */<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>  private void putUpWebUI() throws IOException {<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>    int port = this.conf.getInt(HConstants.REGIONSERVER_INFO_PORT,<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>      HConstants.DEFAULT_REGIONSERVER_INFOPORT);<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>    String addr = this.conf.get("hbase.regionserver.info.bindAddress", "0.0.0.0");<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span><a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>    if(this instanceof HMaster) {<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>      port = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>          HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>      addr = this.conf.get("hbase.master.info.bindAddress", "0.0.0.0");<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>    }<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>    // -1 is for disabling info server<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>    if (port &lt; 0) {<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>      return;<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>    }<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span><a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>    if (!Addressing.isLocalAddress(InetAddress.getByName(addr))) {<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>      String msg =<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>          "Failed to start http info server. Address " + addr<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>              + " does not belong to this host. Correct configuration parameter: "<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>              + "hbase.regionserver.info.bindAddress";<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>      LOG.error(msg);<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>      throw new IOException(msg);<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>    }<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>    // check if auto port bind enabled<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>    boolean auto = this.conf.getBoolean(HConstants.REGIONSERVER_INFO_PORT_AUTO, false);<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>    while (true) {<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>      try {<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>        this.infoServer = new InfoServer(getProcessName(), addr, port, false, this.conf);<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>        infoServer.addPrivilegedServlet("dump", "/dump", getDumpServlet());<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>        configureInfoServer();<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>        this.infoServer.start();<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>        break;<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>      } catch (BindException e) {<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>        if (!auto) {<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>          // auto bind disabled throw BindException<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>          LOG.error("Failed binding http info server to port: " + port);<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>          throw e;<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>        }<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>        // auto bind enabled, try to use another port<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>        LOG.info("Failed binding http info server to port: " + port);<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>        port++;<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>      }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>    }<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>    port = this.infoServer.getPort();<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>    conf.setInt(HConstants.REGIONSERVER_INFO_PORT, port);<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>    int masterInfoPort = conf.getInt(HConstants.MASTER_INFO_PORT,<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>      HConstants.DEFAULT_MASTER_INFOPORT);<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    conf.setInt("hbase.master.info.port.orig", masterInfoPort);<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    conf.setInt(HConstants.MASTER_INFO_PORT, port);<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>  }<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span><a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>  /*<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>   * Verify that server is healthy<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span>   */<a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>  private boolean isHealthy() {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>    if (!dataFsOk) {<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>      // File system problem<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>      return false;<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>    }<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>    // Verify that all threads are alive<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    boolean healthy = (this.leaseManager == null || this.leaseManager.isAlive())<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span>        &amp;&amp; (this.cacheFlusher == null || this.cacheFlusher.isAlive())<a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>        &amp;&amp; (this.walRoller == null || this.walRoller.isAlive())<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>        &amp;&amp; (this.compactionChecker == null || this.compactionChecker.isScheduled())<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>        &amp;&amp; (this.periodicFlusher == null || this.periodicFlusher.isScheduled());<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>    if (!healthy) {<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      stop("One or more threads are no longer alive -- stop");<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>    }<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>    return healthy;<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>  }<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span><a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>  @Override<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span>  public List&lt;WAL&gt; getWALs() {<a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>    return walFactory.getWALs();<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>  }<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span><a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>  @Override<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>  public WAL getWAL(RegionInfo regionInfo) throws IOException {<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>    WAL wal = walFactory.getWAL(regionInfo);<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>    if (this.walRoller != null) {<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      this.walRoller.addWAL(wal);<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>    }<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>    return wal;<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>  }<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span><a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>  public LogRoller getWalRoller() {<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>    return walRoller;<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>  }<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span><a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>  WALFactory getWalFactory() {<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>    return walFactory;<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>  }<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span><a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>  @Override<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>  public Connection getConnection() {<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>    return getAsyncConnection().toConnection();<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>  }<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span><a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>  @Override<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>  public void stop(final String msg) {<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>    stop(msg, false, RpcServer.getRequestUser().orElse(null));<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>  }<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span><a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>  /**<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>   * Stops the regionserver.<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>   * @param msg Status message<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>   * @param force True if this is a regionserver abort<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>   * @param user The user executing the stop request, or null if no user is associated<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>   */<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>  public void stop(final String msg, final boolean force, final User user) {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>    if (!this.stopped) {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>      LOG.info("***** STOPPING region server '" + this + "' *****");<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>      if (this.rsHost != null) {<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>        // when forced via abort don't allow CPs to override<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>        try {<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>          this.rsHost.preStop(msg, user);<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>        } catch (IOException ioe) {<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>          if (!force) {<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>            LOG.warn("The region server did not stop", ioe);<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>            return;<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>          }<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>          LOG.warn("Skipping coprocessor exception on preStop() due to forced shutdown", ioe);<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>        }<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>      }<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>      this.stopped = true;<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>      LOG.info("STOPPED: " + msg);<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      // Wakes run() if it is sleeping<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>      sleeper.skipSleepCycle();<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>    }<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span>  }<a name="line.2291"></a>
+<span class="sourceLineNo">2292</span><a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>  public void waitForServerOnline(){<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>    while (!isStopped() &amp;&amp; !isOnline()) {<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>      synchronized (online) {<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>        try {<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>          online.wait(msgInterval);<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>        } catch (InterruptedException ie) {<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>          Thread.currentThread().interrupt();<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>          break;<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>        }<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>      }<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>    }<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>  }<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span><a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>  @Override<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>  public void postOpenDeployTasks(final PostOpenDeployContext context) throws IOException {<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>    HRegion r = context.getRegion();<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>    long openProcId = context.getOpenProcId();<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>    rpcServices.checkOpen();<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>    LOG.info("Post open deploy tasks for {}, pid={}, masterSystemTime={}",<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>      r.getRegionInfo().getRegionNameAsString(), openProcId, masterSystemTime);<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    // Do checks to see if we need to compact (references or too many files)<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>    // Skip compaction check if region is read only<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span>    if (!r.isReadOnly()) {<a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>      for (HStore s : r.stores.values()) {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>        if (s.hasReferences() || s.needsCompaction()) {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>          this.compactSplitThread.requestSystemCompaction(r, s, "Opening Region");<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>        }<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      }<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>    long openSeqNum = r.getOpenSeqNum();<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>    if (openSeqNum == HConstants.NO_SEQNUM) {<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>      // If we opened a region, we should have read some sequence number from it.<a name="line.2325"></a>
+<span class="sourceLineNo">2326</span>      LOG.error(<a name="line.2326"></a>
+<span class="sourceLineNo">2327</span>        "No sequence number found when opening " + r.getRegionInfo().getRegionNameAsString());<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>      openSeqNum = 0;<a name="line.2328"></a>
+<span class="sourceLineNo">2329</span>    }<a name="line.2329"></a>
 <span class="sourceLineNo">2330</span><a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>  /**<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span>   * around to receive it.<a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>   */<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>    final TransitionCode code = context.getCode();<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>    final RegionInfo[] hris = context.getHris();<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span><a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>    if (code == TransitionCode.OPENED) {<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>      if (hris[0].isMetaRegion()) {<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>        try {<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>        } catch (KeeperException e) {<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>          LOG.info("Failed to update meta location", e);<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>          return false;<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>        }<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>      } else {<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>        try {<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>        } catch (IOException e) {<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>          LOG.info("Failed to update meta", e);<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>          return false;<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>        }<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>      }<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    }<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>    return true;<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>  }<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span><a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>      final RegionStateTransitionContext context) {<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    final TransitionCode code = context.getCode();<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    final RegionInfo[] hris = context.getHris();<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    final long[] procIds = context.getProcIds();<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span><a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>    transition.setTransitionCode(code);<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>    }<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>    for (RegionInfo hri: hris) {<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>    }<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>    for (long procId: procIds) {<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>      transition.addProcId(procId);<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>    }<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span><a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>    return builder.build();<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>  }<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span><a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>  @Override<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>      return skipReportingTransition(context);<a name="line.2392"></a>
+<span class="sourceLineNo">2331</span>    // Notify master<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span>    if (!reportRegionStateTransition(new RegionStateTransitionContext(TransitionCode.OPENED,<a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>      openSeqNum, openProcId, masterSystemTime, r.getRegionInfo()))) {<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>      throw new IOException(<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>        "Failed to report opened region to master: " + r.getRegionInfo().getRegionNameAsString());<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span>    }<a name="line.2336"></a>
+<span class="sourceLineNo">2337</span><a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>    triggerFlushInPrimaryRegion(r);<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span><a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>    LOG.debug("Finished post open deploy task for " + r.getRegionInfo().getRegionNameAsString());<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>  }<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span><a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>  /**<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>   * Helper method for use in tests. Skip the region transition report when there's no master<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>   * around to receive it.<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>   */<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>  private boolean skipReportingTransition(final RegionStateTransitionContext context) {<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>    final TransitionCode code = context.getCode();<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>    long masterSystemTime = context.getMasterSystemTime();<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>    final RegionInfo[] hris = context.getHris();<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span><a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>    if (code == TransitionCode.OPENED) {<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>      Preconditions.checkArgument(hris != null &amp;&amp; hris.length == 1);<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>      if (hris[0].isMetaRegion()) {<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>        try {<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>          MetaTableLocator.setMetaLocation(getZooKeeper(), serverName,<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>              hris[0].getReplicaId(), RegionState.State.OPEN);<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>        } catch (KeeperException e) {<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>          LOG.info("Failed to update meta location", e);<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>          return false;<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>        }<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>      } else {<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>        try {<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>          MetaTableAccessor.updateRegionLocation(asyncClusterConnection.toConnection(), hris[0],<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>              serverName, openSeqNum, masterSystemTime);<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>        } catch (IOException e) {<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>          LOG.info("Failed to update meta", e);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>          return false;<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>        }<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>      }<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    }<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>    return true;<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>  }<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span><a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>  private ReportRegionStateTransitionRequest createReportRegionStateTransitionRequest(<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>      final RegionStateTransitionContext context) {<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>    final TransitionCode code = context.getCode();<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>    final long openSeqNum = context.getOpenSeqNum();<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>    final RegionInfo[] hris = context.getHris();<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>    final long[] procIds = context.getProcIds();<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span><a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>    ReportRegionStateTransitionRequest.Builder builder =<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>        ReportRegionStateTransitionRequest.newBuilder();<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>    builder.setServer(ProtobufUtil.toServerName(serverName));<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>    RegionStateTransition.Builder transition = builder.addTransitionBuilder();<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>    transition.setTransitionCode(code);<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>    if (code == TransitionCode.OPENED &amp;&amp; openSeqNum &gt;= 0) {<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      transition.setOpenSeqNum(openSeqNum);<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>    }<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>    for (RegionInfo hri: hris) {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>      transition.addRegionInfo(ProtobufUtil.toRegionInfo(hri));<a name="line.2392"></a>
 <span class="sourceLineNo">2393</span>    }<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>    final ReportRegionStateTransitionRequest request =<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>        createReportRegionStateTransitionRequest(context);<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span><a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>    final long initPauseTime = 1000;<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>    int tries = 0;<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>    long pauseTime;<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span>    // HRegionServer does down.<a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>      try {<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        if (rss == null) {<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>          createRegionServerStatusStub();<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span>          continue;<a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        }<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>        ReportRegionStateTransitionResponse response =<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>          rss.reportRegionStateTransition(null, request);<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>        if (response.hasErrorMessage()) {<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>          break;<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>        }<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>        }<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>        // NOTE: Return mid-method!!!<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>        return true;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>      } catch (ServiceException se) {<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        boolean pause =<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>        if (pause) {<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>          // Do backoff else we flood the Master with requests.<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>        } else {<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>          pauseTime = initPauseTime; // Reset.<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span>        }<a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>        LOG.info("Failed report transition " +<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>            (pause?<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>                " immediately."),<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>            ioe);<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>        tries++;<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>        if (rssStub == rss) {<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>          rssStub = null;<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>        }<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>      }<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>    }<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>    return false;<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>  }<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span><a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>  /**<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>   */<a name="line.2454"></a>
-<span class="sourceLineNo">2455</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>      return;<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>          region.conf)) {<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      region.setReadsEnabled(true);<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>      return;<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    }<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span><a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2467"></a>
-<span class="sourceLineNo">2468</span><a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>    if (this.executorService != null) {<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>    } else {<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>        region.getRegionInfo());<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>     }<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>  }<a name="line.2476"></a>
+<span class="sourceLineNo">2394</span>    for (long procId: procIds) {<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>      transition.addProcId(procId);<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>    }<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span><a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>    return builder.build();<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>  }<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span><a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>  @Override<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>  public boolean reportRegionStateTransition(final RegionStateTransitionContext context) {<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>    if (TEST_SKIP_REPORTING_TRANSITION) {<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>      return skipReportingTransition(context);<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>    }<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span>    final ReportRegionStateTransitionRequest request =<a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>        createReportRegionStateTransitionRequest(context);<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span><a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>    // Time to pause if master says 'please hold'. Make configurable if needed.<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>    final long initPauseTime = 1000;<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>    int tries = 0;<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span>    long pauseTime;<a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>    // Keep looping till we get an error. We want to send reports even though server is going down.<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>    // Only go down if clusterConnection is null. It is set to null almost as last thing as the<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>    // HRegionServer does down.<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>    while (this.asyncClusterConnection != null &amp;&amp; !this.asyncClusterConnection.isClosed()) {<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>      try {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>        if (rss == null) {<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>          createRegionServerStatusStub();<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span>          continue;<a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>        }<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>        ReportRegionStateTransitionResponse response =<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>          rss.reportRegionStateTransition(null, request);<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>        if (response.hasErrorMessage()) {<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>          LOG.info("TRANSITION FAILED " + request + ": " + response.getErrorMessage());<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>          break;<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>        }<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>        // Log if we had to retry else don't log unless TRACE. We want to<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>        // know if were successful after an attempt showed in logs as failed.<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>        if (tries &gt; 0 || LOG.isTraceEnabled()) {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>          LOG.info("TRANSITION REPORTED " + request);<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>        }<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>        // NOTE: Return mid-method!!!<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>        return true;<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>      } catch (ServiceException se) {<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span>        IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>        boolean pause =<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>            ioe instanceof ServerNotRunningYetException || ioe instanceof PleaseHoldException<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>                || ioe instanceof CallQueueTooBigException;<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>        if (pause) {<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>          // Do backoff else we flood the Master with requests.<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>          pauseTime = ConnectionUtils.getPauseTime(initPauseTime, tries);<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>        } else {<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>          pauseTime = initPauseTime; // Reset.<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>        }<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>        LOG.info("Failed report transition " +<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>          TextFormat.shortDebugString(request) + "; retry (#" + tries + ")" +<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>            (pause?<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>                " after " + pauseTime + "ms delay (Master is coming online...).":<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>                " immediately."),<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>            ioe);<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>        if (pause) Threads.sleep(pauseTime);<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>        tries++;<a name="line.2454"></a>
+<span class="sourceLineNo">2455</span>        if (rssStub == rss) {<a name="line.2455"></a>
+<span class="sourceLineNo">2456</span>          rssStub = null;<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>        }<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>      }<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>    }<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>    return false;<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>  }<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span><a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>  /**<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>   * Trigger a flush in the primary region replica if this region is a secondary replica. Does not<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>   * block this thread. See RegionReplicaFlushHandler for details.<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>   */<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>  private void triggerFlushInPrimaryRegion(final HRegion region) {<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    if (ServerRegionReplicaUtil.isDefaultReplica(region.getRegionInfo())) {<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>      return;<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span>    }<a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>    if (!ServerRegionReplicaUtil.isRegionReplicaReplicationEnabled(region.conf) ||<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>        !ServerRegionReplicaUtil.isRegionReplicaWaitForPrimaryFlushEnabled(<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>          region.conf)) {<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>      region.setReadsEnabled(true);<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>      return;<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>    }<a name="line.2476"></a>
 <span class="sourceLineNo">2477</span><a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>  @Override<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>  public RpcServerInterface getRpcServer() {<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    return rpcServices.rpcServer;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>  }<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span><a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>  @VisibleForTesting<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>  public RSRpcServices getRSRpcServices() {<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>    return rpcServices;<a name="line.2485"></a>
-<span class="sourceLineNo">2486</span>  }<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span><a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>  /**<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>   *<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>   * @param reason<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>   *          the reason we are aborting<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>   * @param cause<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>   *          the exception that caused the abort, or null<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>   */<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>  @Override<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>  public void abort(String reason, Throwable cause) {<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    if (!setAbortRequested()) {<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>      // Abort already in progress, ignore the new request.<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>      LOG.debug(<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>      return;<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>    }<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>    if (cause != null) {<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    } else {<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span>    }<a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>    try {<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>    }<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span><a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>    try {<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>      if (cause != null) {<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>      }<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>      // Report to the master but only if we have already registered with the master.<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>        builder.setErrorMessage(msg);<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>      }<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>    } catch (Throwable t) {<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>    }<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span><a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>    scheduleAbortTimer();<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>    // shutdown should be run as the internal user<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>    stop(reason, true, null);<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>  }<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span><a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>  /**<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>   * Sets the abort state if not already set.<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>   * progress.<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span>   */<a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>  protected boolean setAbortRequested() {<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>    return abortRequested.compareAndSet(false, true);<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>  }<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span><a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>  /**<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>   */<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>  public void abort(String reason) {<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>    abort(reason, null);<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>  }<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span><a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>  @Override<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>  public boolean isAborted() {<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    return abortRequested.get();<a name="line.2565"></a>
+<span class="sourceLineNo">2478</span>    region.setReadsEnabled(false); // disable reads before marking the region as opened.<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>    // RegionReplicaFlushHandler might reset this.<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span><a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    // Submit it to be handled by one of the handlers so that we do not block OpenRegionHandler<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>    if (this.executorService != null) {<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>      this.executorService.submit(new RegionReplicaFlushHandler(this, region));<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>    } else {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      LOG.info("Executor is null; not running flush of primary region replica for {}",<a name="line.2485"></a>
+<span class="sourceLineNo">2486</span>        region.getRegionInfo());<a name="line.2486"></a>
+<span class="sourceLineNo">2487</span>     }<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>  }<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span><a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>  @Override<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>  public RpcServerInterface getRpcServer() {<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    return rpcServices.rpcServer;<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>  }<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span><a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>  @VisibleForTesting<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>  public RSRpcServices getRSRpcServices() {<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    return rpcServices;<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>  }<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span><a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>  /**<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>   * Cause the server to exit without closing the regions it is serving, the log<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>   * it is using and without notifying the master. Used unit testing and on<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>   * catastrophic events such as HDFS is yanked out from under hbase or we OOME.<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>   *<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>   * @param reason<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span>   *          the reason we are aborting<a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>   * @param cause<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>   *          the exception that caused the abort, or null<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>   */<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>  @Override<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  public void abort(String reason, Throwable cause) {<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>    if (!setAbortRequested()) {<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>      // Abort already in progress, ignore the new request.<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span>      LOG.debug(<a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>          "Abort already in progress. Ignoring the current request with reason: {}", reason);<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>      return;<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>    }<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>    String msg = "***** ABORTING region server " + this + ": " + reason + " *****";<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>    if (cause != null) {<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>      LOG.error(HBaseMarkers.FATAL, msg, cause);<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>    } else {<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>      LOG.error(HBaseMarkers.FATAL, msg);<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>    }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span>    // HBASE-4014: show list of coprocessors that were loaded to help debug<a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>    // regionserver crashes.Note that we're implicitly using<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>    // java.util.HashSet's toString() method to print the coprocessor names.<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>    LOG.error(HBaseMarkers.FATAL, "RegionServer abort: loaded coprocessors are: " +<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>        CoprocessorHost.getLoadedCoprocessors());<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>    // Try and dump metrics if abort -- might give clue as to how fatal came about....<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>    try {<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>      LOG.info("Dump of metrics as JSON on abort: " + DumpRegionServerMetrics.dumpMetrics());<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>    } catch (MalformedObjectNameException | IOException e) {<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>      LOG.warn("Failed dumping metrics", e);<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>    }<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span><a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>    // Do our best to report our abort to the master, but this may not work<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>    try {<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>      if (cause != null) {<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>        msg += "\nCause:\n" + Throwables.getStackTraceAsString(cause);<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>      }<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>      // Report to the master but only if we have already registered with the master.<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>      if (rss != null &amp;&amp; this.serverName != null) {<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>        ReportRSFatalErrorRequest.Builder builder =<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>          ReportRSFatalErrorRequest.newBuilder();<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>        builder.setServer(ProtobufUtil.toServerName(this.serverName));<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>        builder.setErrorMessage(msg);<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>        rss.reportRSFatalError(null, builder.build());<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>      }<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>    } catch (Throwable t) {<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      LOG.warn("Unable to report fatal error to master", t);<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span><a name="line.2553"></a>
+<span class="sourceLineNo">2554</span>    scheduleAbortTimer();<a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>    // shutdown should be run as the internal user<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>    stop(reason, true, null);<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>  }<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span><a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>  /**<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>   * Sets the abort state if not already set.<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>   * @return True if abortRequested set to True successfully, false if an abort is already in<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>   * progress.<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>   */<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>  protected boolean setAbortRequested() {<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    return abortRequested.compareAndSet(false, true);<a name="line.2565"></a>
 <span class="sourceLineNo">2566</span>  }<a name="line.2566"></a>
 <span class="sourceLineNo">2567</span><a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>  /*<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>   * hostname+port immediately.<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>   */<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>  @VisibleForTesting<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>  protected void kill() {<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>    this.killed = true;<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>    abort("Simulated kill");<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>  }<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span><a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>  // Limits the time spent in the shutdown process.<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>  private void scheduleAbortTimer() {<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>    if (this.abortMonitor == null) {<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>      TimerTask abortTimeoutTask = null;<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>      try {<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>        timerTaskCtor.setAccessible(true);<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>      } catch (Exception e) {<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>      }<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      if (abortTimeoutTask != null) {<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>      }<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>    }<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>  }<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span><a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>  /**<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>   * have already been called.<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>   */<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>  protected void stopServiceThreads() {<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>    // clean up the scheduled chores<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    if (this.choreService != null) {<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span>      choreService.cancelChore(compactionChecker);<a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>      choreService.cancelChore(periodicFlusher);<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>      choreService.cancelChore(healthCheckChore);<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>      choreService.cancelChore(executorStatusChore);<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>      choreService.cancelChore(storefileRefresher);<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span>      choreService.shutdown();<a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    }<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span><a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>    if (this.cacheFlusher != null) {<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>      this.cacheFlusher.join();<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>    }<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span><a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    if (this.spanReceiverHost != null) {<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>      this.spanReceiverHost.closeReceivers();<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>    }<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    if (this.walRoller != null) {<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>      this.walRoller.close();<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>    }<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    if (this.compactSplitThread != null) {<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>      this.compactSplitThread.join();<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    }<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    if (this.executorService != null) this.executorService.shutdown();<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>    if (this.replicationSourceHandler != null &amp;&amp;<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>        this.replicationSourceHandler == this.replicationSinkHandler) {<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>    } else {<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>      if (this.replicationSourceHandler != null) {<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>      }<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>      if (this.replicationSinkHandler != null) {<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>      }<a name="line.2641"></a>
+<span class="sourceLineNo">2568</span>  /**<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>   * @see HRegionServer#abort(String, Throwable)<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>   */<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>  public void abort(String reason) {<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>    abort(reason, null);<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>  }<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span><a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>  @Override<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>  public boolean isAborted() {<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>    return abortRequested.get();<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>  }<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span><a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>  /*<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>   * Simulate a kill -9 of this server. Exits w/o closing regions or cleaninup<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>   * logs but it does close socket in case want to bring up server on old<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>   * hostname+port immediately.<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>   */<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>  @VisibleForTesting<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>  protected void kill() {<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>    this.killed = true;<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>    abort("Simulated kill");<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>  }<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span><a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>  // Limits the time spent in the shutdown process.<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>  private void scheduleAbortTimer() {<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>    if (this.abortMonitor == null) {<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>      this.abortMonitor = new Timer("Abort regionserver monitor", true);<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>      TimerTask abortTimeoutTask = null;<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      try {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        Constructor&lt;? extends TimerTask&gt; timerTaskCtor =<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>          Class.forName(conf.get(ABORT_TIMEOUT_TASK, SystemExitWhenAbortTimeout.class.getName()))<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>            .asSubclass(TimerTask.class).getDeclaredConstructor();<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>        timerTaskCtor.setAccessible(true);<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>        abortTimeoutTask = timerTaskCtor.newInstance();<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>      } catch (Exception e) {<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>        LOG.warn("Initialize abort timeout task failed", e);<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>      }<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>      if (abortTimeoutTask != null) {<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>        abortMonitor.schedule(abortTimeoutTask, conf.getLong(ABORT_TIMEOUT, DEFAULT_ABORT_TIMEOUT));<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>      }<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>    }<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>  }<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span><a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>  /**<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>   * Wait on all threads to finish. Presumption is that all closes and stops<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>   * have already been called.<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>   */<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>  protected void stopServiceThreads() {<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>    // clean up the scheduled chores<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    if (this.choreService != null) {<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span>      choreService.cancelChore(nonceManagerChore);<a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>      choreService.cancelChore(compactionChecker);<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>      choreService.cancelChore(periodicFlusher);<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>      choreService.cancelChore(healthCheckChore);<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>      choreService.cancelChore(executorStatusChore);<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>      choreService.cancelChore(storefileRefresher);<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span>      choreService.cancelChore(fsUtilizationChore);<a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>      choreService.cancelChore(slowLogTableOpsChore);<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>      // clean up the remaining scheduled chores (in case we missed out any)<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>      choreService.shutdown();<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>    }<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span><a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>    if (this.cacheFlusher != null) {<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>      this.cacheFlusher.join();<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    }<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span><a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>    if (this.spanReceiverHost != null) {<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>      this.spanReceiverHost.closeReceivers();<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>    }<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>    if (this.walRoller != null) {<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>      this.walRoller.close();<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>    }<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>    if (this.compactSplitThread != null) {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>      this.compactSplitThread.join();<a name="line.2641"></a>
 <span class="sourceLineNo">2642</span>    }<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>  }<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span><a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>  /**<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>   * @return Return the object that implements the replication<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>   * source executorService.<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>   */<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>  @Override<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>    return replicationSourceHandler;<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>  }<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span><a name="line.2653"></a>
-<span class="sourceLineNo">2654</span>  /**<a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>   */<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>    return replicationSinkHandler;<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>  }<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span><a name="line.2660"></a>
-<span class="sourceLineNo">2661</span>  /**<a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>   * Method will block until a master is available. You can break from this<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>   * block by requesting the server stop.<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>   *<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>   * @return master + port, or null if server has been stopped<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>   */<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>    return createRegionServerStatusStub(false);<a name="line.2671"></a>
+<span class="sourceLineNo">2643</span>    if (this.executorService != null) {<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>      this.executorService.shutdown();<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>    }<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>    if (sameReplicationSourceAndSink &amp;&amp; this.replicationSourceHandler != null) {<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>      this.replicationSourceHandler.stopReplicationService();<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>    } else {<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>      if (this.replicationSourceHandler != null) {<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        this.replicationSourceHandler.stopReplicationService();<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>      }<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>      if (this.replicationSinkHandler != null) {<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>        this.replicationSinkHandler.stopReplicationService();<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>      }<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>    }<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>  }<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>  /**<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>   * @return Return the object that implements the replication<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>   * source executorService.<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>   */<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>  @Override<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>  public ReplicationSourceService getReplicationSourceService() {<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span>    return replicationSourceHandler;<a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>  }<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span><a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>  /**<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>   * @return Return the object that implements the replication sink executorService.<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>   */<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>  public ReplicationSinkService getReplicationSinkService() {<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>    return replicationSinkHandler;<a name="line.2671"></a>
 <span class="sourceLineNo">2672</span>  }<a name="line.2672"></a>
 <span class="sourceLineNo">2673</span><a name="line.2673"></a>
 <span class="sourceLineNo">2674</span>  /**<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>   * You can break from this block by requesting the server stop.<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>   * @return master + port, or null if server has been stopped<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>   */<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>  @VisibleForTesting<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    if (rssStub != null) {<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>      return masterAddressTracker.getMasterAddress();<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    ServerName sn = null;<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>    long previousLogTime = 0;<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span>    boolean interrupted = false;<a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>    try {<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>      while (keepLooping()) {<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>        if (sn == null) {<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>          if (!keepLooping()) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>            // give up with no connection.<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>            return null;<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>          }<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>            LOG.debug("No master found; retry");<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>            previousLogTime = System.currentTimeMillis();<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>          }<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>          if (sleepInterrupted(200)) {<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>            interrupted = true;<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>          }<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>          continue;<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        }<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span><a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>        // If we are on the active master, use the shortcut<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>          break;<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>        }<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        try {<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>          BlockingRpcChannel channel =<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>              shortOperationTimeout);<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>          break;<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>        } catch (IOException e) {<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>            e = e instanceof RemoteException ?<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>            } else {<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>            }<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>            previousLogTime = System.currentTimeMillis();<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>          }<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>          if (sleepInterrupted(200)) {<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span>            interrupted = true;<a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>          }<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>        }<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>      }<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>    } finally {<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>      if (interrupted) {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>        Thread.currentThread().interrupt();<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      }<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    }<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    this.rssStub = intRssStub;<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>    this.lockStub = intLockStub;<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    return sn;<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>  }<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span><a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>  /**<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>   * @return True if we should break loop because cluster is going down or<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>   */<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>  private boolean keepLooping() {<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  }<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span><a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  /*<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>   * us by the master.<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * null if we failed to register.<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @throws IOException<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   */<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>    if (masterServerName == null || rss == null) return null;<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>    RegionServerStartupResponse result = null;<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>    try {<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>      rpcServices.requestCount.reset();<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>      int port = rpcServices.isa.getPort();<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>      }<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>      request.setPort(port);<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>      request.setServerStartCode(this.startcode);<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>      request.setServerCurrentTime(now);<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    } catch (ServiceException se) {<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>            ioe);<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>        // Re-throw IOE will cause RS to abort<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>        throw ioe;<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>        LOG.debug("Master is not running yet");<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>      } else {<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>        LOG.warn("error telling master we are up", se);<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>      }<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>      rssStub = null;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>    }<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    return result;<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>  }<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span><a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>  @Override<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span>    try {<a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span>      if (rss == null) { // Try to connect one more time<a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>        createRegionServerStatusStub();<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>        rss = rssStub;<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>        if (rss == null) {<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>          // Still no luck, we tried<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>              .build();<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>        }<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>      }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>    } catch (ServiceException e) {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>          .build();<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>    }<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>  }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span><a name="line.2834"></a>
-<span class="sourceLineNo">2835</span>  /**<a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>   * Close meta region if we carry it<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>   * @param abort Whether we're running an abort.<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>   */<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>    HRegion meta = null;<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>    try {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>        if (hri.isMetaRegion()) {<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>          meta = e.getValue();<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>        }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>        if (meta != null) break;<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span>      }<a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>    } finally {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>    }<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>  }<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span><a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>  /**<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>   * Schedule closes on all user regions.<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>   * that are already closed or that are closing.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>   * @param abort Whether we're running an abort.<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>   */<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>  private void closeUserRegions(final boolean abort) {<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>    try {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>        HRegion r = e.getValue();<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>          // Don't update zk with this close transition; pass false.<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>        }<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>      }<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>    } finally {<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>    }<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>  }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span><a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>  /** @return the info server */<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>  public InfoServer getInfoServer() {<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>    return infoServer;<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span>  }<a name="line.2880"></a>
-<span class="sourceLineNo">2881</span><a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>  /**<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>   * @return true if a stop has been requested.<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>   */<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>  @Override<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span>  public boolean isStopped() {<a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>    return this.stopped;<a name="line.2887"></a>
+<span class="sourceLineNo">2675</span>   * Get the current master from ZooKeeper and open the RPC connection to it.<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>   * To get a fresh connection, the current rssStub must be null.<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>   * Method will block until a master is available. You can break from this<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>   * block by requesting the server stop.<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>   *<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>   * @return master + port, or null if server has been stopped<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>   */<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>  private synchronized ServerName createRegionServerStatusStub() {<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    // Create RS stub without refreshing the master node from ZK, use cached data<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>    return createRegionServerStatusStub(false);<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>  }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span><a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>  /**<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>   * Get the current master from ZooKeeper and open the RPC connection to it. To get a fresh<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>   * connection, the current rssStub must be null. Method will block until a master is available.<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>   * You can break from this block by requesting the server stop.<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>   * @param refresh If true then master address will be read from ZK, otherwise use cached data<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>   * @return master + port, or null if server has been stopped<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  @VisibleForTesting<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>  protected synchronized ServerName createRegionServerStatusStub(boolean refresh) {<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>    if (rssStub != null) {<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>      return masterAddressTracker.getMasterAddress();<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    }<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>    ServerName sn = null;<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    long previousLogTime = 0;<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>    RegionServerStatusService.BlockingInterface intRssStub = null;<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    LockService.BlockingInterface intLockStub = null;<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    boolean interrupted = false;<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>    try {<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>      while (keepLooping()) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>        sn = this.masterAddressTracker.getMasterAddress(refresh);<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>        if (sn == null) {<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>          if (!keepLooping()) {<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>            // give up with no connection.<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>            LOG.debug("No master found and cluster is stopped; bailing out");<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>            return null;<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>          }<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>            LOG.debug("No master found; retry");<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>            previousLogTime = System.currentTimeMillis();<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>          }<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>          refresh = true; // let's try pull it from ZK directly<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>          if (sleepInterrupted(200)) {<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>            interrupted = true;<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>          }<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>          continue;<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>        }<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span><a name="line.2723"></a>
+<span class="sourceLineNo">2724</span>        // If we are on the active master, use the shortcut<a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>        if (this instanceof HMaster &amp;&amp; sn.equals(getServerName())) {<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>          // Wrap the shortcut in a class providing our version to the calls where it's relevant.<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>          // Normally, RpcServer-based threadlocals do that.<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>          intRssStub = new MasterRpcServicesVersionWrapper(((HMaster)this).getMasterRpcServices());<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>          intLockStub = ((HMaster)this).getMasterRpcServices();<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          break;<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>        }<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>        try {<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>          BlockingRpcChannel channel =<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>            this.rpcClient.createBlockingRpcChannel(sn, userProvider.getCurrent(),<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>              shortOperationTimeout);<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>          intRssStub = RegionServerStatusService.newBlockingStub(channel);<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>          intLockStub = LockService.newBlockingStub(channel);<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>          break;<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>        } catch (IOException e) {<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>          if (System.currentTimeMillis() &gt; (previousLogTime + 1000)) {<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span>            e = e instanceof RemoteException ?<a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>              ((RemoteException)e).unwrapRemoteException() : e;<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>            if (e instanceof ServerNotRunningYetException) {<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>              LOG.info("Master isn't available yet, retrying");<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>            } else {<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>              LOG.warn("Unable to connect to master. Retrying. Error was:", e);<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>            }<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>            previousLogTime = System.currentTimeMillis();<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>          }<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>          if (sleepInterrupted(200)) {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>            interrupted = true;<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>          }<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>        }<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>      }<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>    } finally {<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>      if (interrupted) {<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span>        Thread.currentThread().interrupt();<a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>      }<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>    }<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>    this.rssStub = intRssStub;<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>    this.lockStub = intLockStub;<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    return sn;<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>  }<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span><a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>  /**<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>   * @return True if we should break loop because cluster is going down or<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>   * this server has been stopped or hdfs has gone bad.<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>   */<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>  private boolean keepLooping() {<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>    return !this.stopped &amp;&amp; isClusterUp();<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>  }<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span><a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>  /*<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>   * Let the master know we're here Run initialization using parameters passed<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>   * us by the master.<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>   * @return A Map of key/value configurations we got from the Master else<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>   * null if we failed to register.<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>   * @throws IOException<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>   */<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>  private RegionServerStartupResponse reportForDuty() throws IOException {<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>    if (this.masterless) return RegionServerStartupResponse.getDefaultInstance();<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>    ServerName masterServerName = createRegionServerStatusStub(true);<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>    if (masterServerName == null || rss == null) return null;<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>    RegionServerStartupResponse result = null;<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span>    try {<a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>      rpcServices.requestCount.reset();<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>      rpcServices.rpcGetRequestCount.reset();<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>      rpcServices.rpcScanRequestCount.reset();<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>      rpcServices.rpcMultiRequestCount.reset();<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>      rpcServices.rpcMutateRequestCount.reset();<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>      LOG.info("reportForDuty to master=" + masterServerName + " with port="<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>        + rpcServices.isa.getPort() + ", startcode=" + this.startcode);<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>      int port = rpcServices.isa.getPort();<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>      RegionServerStartupRequest.Builder request = RegionServerStartupRequest.newBuilder();<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span>      if (!StringUtils.isBlank(useThisHostnameInstead)) {<a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>        request.setUseThisHostnameInstead(useThisHostnameInstead);<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>      }<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>      request.setPort(port);<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span>      request.setServerStartCode(this.startcode);<a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>      request.setServerCurrentTime(now);<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>      result = rss.regionServerStartup(null, request.build());<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>    } catch (ServiceException se) {<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>      if (ioe instanceof ClockOutOfSyncException) {<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>        LOG.error(HBaseMarkers.FATAL, "Master rejected startup because clock is out of sync",<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>            ioe);<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>        // Re-throw IOE will cause RS to abort<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>        throw ioe;<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>      } else if (ioe instanceof ServerNotRunningYetException) {<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>        LOG.debug("Master is not running yet");<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span>      } else {<a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>        LOG.warn("error telling master we are up", se);<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>      }<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>      rssStub = null;<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span>    }<a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>    return result;<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>  }<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span><a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>  @Override<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>  public RegionStoreSequenceIds getLastSequenceId(byte[] encodedRegionName) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>    try {<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>      GetLastFlushedSequenceIdRequest req =<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>          RequestConverter.buildGetLastFlushedSequenceIdRequest(encodedRegionName);<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>      RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>      if (rss == null) { // Try to connect one more time<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>        createRegionServerStatusStub();<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>        rss = rssStub;<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>        if (rss == null) {<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>          // Still no luck, we tried<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>          LOG.warn("Unable to connect to the master to check " + "the last flushed sequence id");<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>          return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>              .build();<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>        }<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      }<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>      GetLastFlushedSequenceIdResponse resp = rss.getLastFlushedSequenceId(null, req);<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span>      return RegionStoreSequenceIds.newBuilder()<a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>          .setLastFlushedSequenceId(resp.getLastFlushedSequenceId())<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>          .addAllStoreSequenceId(resp.getStoreLastFlushedSequenceIdList()).build();<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>    } catch (ServiceException e) {<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span>      LOG.warn("Unable to connect to the master to check the last flushed sequence id", e);<a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      return RegionStoreSequenceIds.newBuilder().setLastFlushedSequenceId(HConstants.NO_SEQNUM)<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>          .build();<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>    }<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>  }<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span><a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>  /**<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>   * Close meta region if we carry it<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>   * @param abort Whether we're running an abort.<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>   */<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span>  private void closeMetaTableRegions(final boolean abort) {<a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>    HRegion meta = null;<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>    try {<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>      for (Map.Entry&lt;String, HRegion&gt; e: onlineRegions.entrySet()) {<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>        RegionInfo hri = e.getValue().getRegionInfo();<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>        if (hri.isMetaRegion()) {<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>          meta = e.getValue();<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>        }<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>        if (meta != null) break;<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      }<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>    } finally {<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>    }<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>    if (meta != null) closeRegionIgnoreErrors(meta.getRegionInfo(), abort);<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>  }<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span><a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>  /**<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>   * Schedule closes on all user regions.<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>   * Should be safe calling multiple times because it wont' close regions<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>   * that are already closed or that are closing.<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>   * @param abort Whether we're running an abort.<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>   */<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>  private void closeUserRegions(final boolean abort) {<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>    this.onlineRegionsLock.writeLock().lock();<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>    try {<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      for (Map.Entry&lt;String, HRegion&gt; e: this.onlineRegions.entrySet()) {<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>        HRegion r = e.getValue();<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>        if (!r.getRegionInfo().isMetaRegion() &amp;&amp; r.isAvailable()) {<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>          // Don't update zk with this close transition; pass false.<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>          closeRegionIgnoreErrors(r.getRegionInfo(), abort);<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span>        }<a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>      }<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>    } finally {<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>      this.onlineRegionsLock.writeLock().unlock();<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>    }<a name="line.2887"></a>
 <span class="sourceLineNo">2888</span>  }<a name="line.2888"></a>
 <span class="sourceLineNo">2889</span><a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>  @Override<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span>  public boolean isStopping() {<a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>    return this.stopping;<a name="line.2892"></a>
+<span class="sourceLineNo">2890</span>  /** @return the info server */<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>  public InfoServer getInfoServer() {<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>    return infoServer;<a name="line.2892"></a>
 <span class="sourceLineNo">2893</span>  }<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>  @Override<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>  public Configuration getConfiguration() {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>    return conf;<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>  }<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span><a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    return this.onlineRegions;<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>  }<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span><a name="line.2903"></a>
-<span class="sourceLineNo">2904</span>  public int getNumberOfOnlineRegions() {<a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    return this.onlineRegions.size();<a name="line.2905"></a>
+<span class="sourceLineNo">2895</span>  /**<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>   * @return true if a stop has been requested.<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span>   */<a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>  @Override<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>  public boolean isStopped() {<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>    return this.stopped;<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>  }<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span><a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>  @Override<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>  public boolean isStopping() {<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>    return this.stopping;<a name="line.2905"></a>
 <span class="sourceLineNo">2906</span>  }<a name="line.2906"></a>
 <span class="sourceLineNo">2907</span><a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>  /**<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>   * For tests, web ui and metrics.<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>   */<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    return Collections.unmodifiableCollection(regions);<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>  }<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span><a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>  @Override<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>  public void addRegion(HRegion region) {<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>    configurationManager.registerObserver(region);<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>  }<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span><a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>      long size) {<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>    }<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>    sortedRegions.get(size).add(region);<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>  }<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>  /**<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>   *   the biggest.<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>   */<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>    // we'll sort the regions in reverse<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2940"></a>
+<span class="sourceLineNo">2908</span>  @Override<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>  public Configuration getConfiguration() {<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span>    return conf;<a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>  }<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span><a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>  protected Map&lt;String, HRegion&gt; getOnlineRegions() {<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>    return this.onlineRegions;<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>  }<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span><a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>  public int getNumberOfOnlineRegions() {<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    return this.onlineRegions.size();<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>  }<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span><a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>  /**<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>   * For tests, web ui and metrics.<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>   * This method will only work if HRegionServer is in the same JVM as client;<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>   * HRegion cannot be serialized to cross an rpc.<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>   */<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>  public Collection&lt;HRegion&gt; getOnlineRegionsLocalContext() {<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    Collection&lt;HRegion&gt; regions = this.onlineRegions.values();<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>    return Collections.unmodifiableCollection(regions);<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span>  }<a name="line.2929"></a>
+<span class="sourceLineNo">2930</span><a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>  @Override<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>  public void addRegion(HRegion region) {<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>    this.onlineRegions.put(region.getRegionInfo().getEncodedName(), region);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    configurationManager.registerObserver(region);<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span>  }<a name="line.2935"></a>
+<span class="sourceLineNo">2936</span><a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>  private void addRegion(SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions, HRegion region,<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>      long size) {<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>    if (!sortedRegions.containsKey(size)) {<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span>      sortedRegions.put(size, new ArrayList&lt;&gt;());<a name="line.2940"></a>
 <span class="sourceLineNo">2941</span>    }<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>    return sortedRegions;<a name="line.2942"></a>
+<span class="sourceLineNo">2942</span>    sortedRegions.get(size).add(region);<a name="line.2942"></a>
 <span class="sourceLineNo">2943</span>  }<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span><a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>  /**<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>   *   biggest.<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>   */<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>    // we'll sort the regions in reverse<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>    }<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>    return sortedRegions;<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>  }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span><a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  /**<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>   * @return time stamp in millis of when this region server was started<a name="line.2960"></a>
+<span class="sourceLineNo">2944</span>  /**<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   * @return A new Map of online regions sorted by region off-heap size with the first entry being<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>   *   the biggest.<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>   */<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOffHeapSize() {<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    // we'll sort the regions in reverse<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>      addRegion(sortedRegions, region, region.getMemStoreOffHeapSize());<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>    }<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>    return sortedRegions;<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span>  }<a name="line.2956"></a>
+<span class="sourceLineNo">2957</span><a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  /**<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   * @return A new Map of online regions sorted by region heap size with the first entry being the<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>   *   biggest.<a name="line.2960"></a>
 <span class="sourceLineNo">2961</span>   */<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>  public long getStartcode() {<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>    return this.startcode;<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span>  }<a name="line.2964"></a>
-<span class="sourceLineNo">2965</span><a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>  /** @return reference to FlushRequester */<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>  @Override<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>  public FlushRequester getFlushRequester() {<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>    return this.cacheFlusher;<a name="line.2969"></a>
+<span class="sourceLineNo">2962</span>  SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; getCopyOfOnlineRegionsSortedByOnHeapSize() {<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>    // we'll sort the regions in reverse<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>    SortedMap&lt;Long, Collection&lt;HRegion&gt;&gt; sortedRegions = new TreeMap&lt;&gt;(Comparator.reverseOrder());<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>    // Copy over all regions. Regions are sorted by size with biggest first.<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>    for (HRegion region : this.onlineRegions.values()) {<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span>      addRegion(sortedRegions, region, region.getMemStoreHeapSize());<a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>    }<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>    return sortedRegions;<a name="line.2969"></a>
 <span class="sourceLineNo">2970</span>  }<a name="line.2970"></a>
 <span class="sourceLineNo">2971</span><a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>  @Override<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>    return this.compactSplitThread;<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>  }<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span><a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>  @Override<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>  public LeaseManager getLeaseManager() {<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>    return leaseManager;<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>  }<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span><a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>  /**<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>   * @return Return the rootDir.<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>   */<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span>  protected Path getDataRootDir() {<a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>    return dataRootDir;<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>  }<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span><a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>  @Override<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  public FileSystem getFileSystem() {<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span>    return dataFs;<a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  }<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span><a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>  /**<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>   */<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>  boolean isDataFileSystemOk() {<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>    return this.dataFsOk;<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>  }<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span><a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>  /**<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span>   * @return Return the walRootDir.<a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>   */<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>  public Path getWALRootDir() {<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>    return walRootDir;<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>  }<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span><a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>  /**<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>   * @return Return the walFs.<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>   */<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>  public FileSystem getWALFileSystem() {<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>    return walFs;<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>  }<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span><a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>  @Override<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>  public String toString() {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>    return getServerName().toString();<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>  }<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span><a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>  @Override<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>  public ZKWatcher getZooKeeper() {<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    return zooKeeper;<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span><a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  @Override<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>    return csm;<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>  }<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span><a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>  @Override<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>  public ServerName getServerName() {<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>    return serverName;<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>  }<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span><a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>    return this.rsHost;<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span>  }<a name="line.3037"></a>
-<span class="sourceLineNo">3038</span><a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>  @Override<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>    return this.regionsInTransitionInRS;<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span>  }<a name="line.3042"></a>
-<span class="sourceLineNo">3043</span><a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>  @Override<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>  public ExecutorService getExecutorService() {<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>    return executorService;<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>  }<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span><a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>  @Override<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>  public ChoreService getChoreService() {<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>    return choreService;<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>  }<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span><a name="line.3053"></a>
-<span class="sourceLineNo">3054</span>  @Override<a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>    return rsQuotaManager;<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>  }<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span><a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>  //<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>  // Main program and support routines<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>  //<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>  /**<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>   * Load the replication executorService objects, if any<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>   */<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>    // read in the name of the source replication class from the config file.<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span><a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>    // read in the name of the sink replication class from the config file.<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span><a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>    // only one object.<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>    } else {<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>    }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>  }<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span><a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>    try {<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>      throw new IOException("Could not find class for " + classname);<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>    }<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>    return service;<a name="line.3101"></a>
+<span class="sourceLineNo">2972</span>  /**<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>   * @return time stamp in millis of when this region server was started<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>   */<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>  public long getStartcode() {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>    return this.startcode;<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>  }<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span><a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>  /** @return reference to FlushRequester */<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>  @Override<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>  public FlushRequester getFlushRequester() {<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>    return this.cacheFlusher;<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>  }<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span><a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>  @Override<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>  public CompactionRequester getCompactionRequestor() {<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>    return this.compactSplitThread;<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span>  }<a name="line.2988"></a>
+<span class="sourceLineNo">2989</span><a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>  @Override<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>  public LeaseManager getLeaseManager() {<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>    return leaseManager;<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  /**<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>   * @return Return the rootDir.<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>   */<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>  protected Path getDataRootDir() {<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>    return dataRootDir;<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>  }<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span><a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>  @Override<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>  public FileSystem getFileSystem() {<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>    return dataFs;<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span>  }<a name="line.3005"></a>
+<span class="sourceLineNo">3006</span><a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>  /**<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @return {@code true} when the data file system is available, {@code false} otherwise.<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   */<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>  boolean isDataFileSystemOk() {<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>    return this.dataFsOk;<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>  }<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span><a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>  /**<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>   * @return Return the walRootDir.<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>   */<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>  public Path getWALRootDir() {<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    return walRootDir;<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>  }<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span><a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>  /**<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>   * @return Return the walFs.<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>   */<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>  public FileSystem getWALFileSystem() {<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    return walFs;<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>  }<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span><a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>  @Override<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  public String toString() {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    return getServerName().toString();<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>  }<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span><a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>  @Override<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>  public ZKWatcher getZooKeeper() {<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>    return zooKeeper;<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span><a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>  @Override<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>  public CoordinatedStateManager getCoordinatedStateManager() {<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span>    return csm;<a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>  }<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span><a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>  @Override<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  public ServerName getServerName() {<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span>    return serverName;<a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>  }<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span><a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>  public RegionServerCoprocessorHost getRegionServerCoprocessorHost(){<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>    return this.rsHost;<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>  }<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span><a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>  @Override<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>  public ConcurrentMap&lt;byte[], Boolean&gt; getRegionsInTransitionInRS() {<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    return this.regionsInTransitionInRS;<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>  }<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span><a name="line.3056"></a>
+<span class="sourceLineNo">3057</span>  @Override<a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  public ExecutorService getExecutorService() {<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>    return executorService;<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>  }<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span><a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>  @Override<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>  public ChoreService getChoreService() {<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>    return choreService;<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>  }<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span><a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>  @Override<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>  public RegionServerRpcQuotaManager getRegionServerRpcQuotaManager() {<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span>    return rsQuotaManager;<a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>  }<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span><a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>  //<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span>  // Main program and support routines<a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>  //<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>  /**<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>   * Load the replication executorService objects, if any<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>   */<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>  private static void createNewReplicationInstance(Configuration conf, HRegionServer server,<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>      FileSystem walFs, Path walDir, Path oldWALDir, WALProvider walProvider) throws IOException {<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>    // read in the name of the source replication class from the config file.<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>    String sourceClassname = conf.get(HConstants.REPLICATION_SOURCE_SERVICE_CLASSNAME,<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>      HConstants.REPLICATION_SERVICE_CLASSNAME_DEFAULT);<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span><a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>    // read in the name of the sink replication class from the config file.<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>    String sinkClassname = conf.get(HConstants.REPLICATION_SINK_SERVICE_CLASSNAME,<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>      HConstants.REPLICATION_SINK_SERVICE_CLASSNAME_DEFAULT);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span><a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>    // If both the sink and the source class names are the same, then instantiate<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>    // only one object.<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>    if (sourceClassname.equals(sinkClassname)) {<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>      server.replicationSinkHandler = (ReplicationSinkService) server.replicationSourceHandler;<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>      server.sameReplicationSourceAndSink = true;<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>    } else {<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>      server.replicationSourceHandler = newReplicationInstance(sourceClassname,<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>        ReplicationSourceService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>      server.replicationSinkHandler = newReplicationInstance(sinkClassname,<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>        ReplicationSinkService.class, conf, server, walFs, walDir, oldWALDir, walProvider);<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>      server.sameReplicationSourceAndSink = false;<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>    }<a name="line.3101"></a>
 <span class="sourceLineNo">3102</span>  }<a name="line.3102"></a>
 <span class="sourceLineNo">3103</span><a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span>    if(!this.isOnline()){<a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>      return walGroupsReplicationStatus;<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>    }<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>    }<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    return walGroupsReplicationStatus;<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>  }<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span><a name="line.3117"></a>
-<span class="sourceLineNo">3118</span>  /**<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>   */<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>  static HRegionServer constructRegionServer(<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>      final Configuration conf<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>  ) {<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    try {<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>      return c.newInstance(conf);<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>    } catch (Exception e) {<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>          + regionServerClass.toString(), e);<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>    }<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>  }<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span><a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>  /**<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>   */<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>  public static void main(String[] args) {<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span>    VersionInfo.logVersion();<a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>    @SuppressWarnings("unchecked")<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span><a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>  }<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span><a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>  /**<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>   * Gets the online regions of the specified table.<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>   * all the ONLINE regions in the table.<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>   * @param tableName table to limit the scope of the query<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>   */<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span>  @Override<a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>     synchronized (this.onlineRegions) {<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span>           tableRegions.add(region);<a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>         }<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>       }<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>     }<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>     return tableRegions;<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span>   }<a name="line.3171"></a>
-<span class="sourceLineNo">3172</span><a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>  @Override<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    List&lt;HRegion&gt; allRegions;<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>    synchronized (this.onlineRegions) {<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>      // Return a clone copy of the onlineRegions<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>    }<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>    return allRegions;<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>  }<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span><a name="line.3182"></a>
-<span class="sourceLineNo">3183</span>  /**<a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>   * Gets the online tables in this RS.<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>   * This method looks at the in-memory onlineRegions.<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>   * @return all the online tables in this RS<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>   */<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>    synchronized (this.onlineRegions) {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>      }<a name="line.3193"></a>
+<span class="sourceLineNo">3104</span>  private static &lt;T extends ReplicationService&gt; T newReplicationInstance(String classname,<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>      Class&lt;T&gt; xface, Configuration conf, HRegionServer server, FileSystem walFs, Path logDir,<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>      Path oldLogDir, WALProvider walProvider) throws IOException {<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    final Class&lt;? extends T&gt; clazz;<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>    try {<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span>      ClassLoader classLoader = Thread.currentThread().getContextClassLoader();<a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>      clazz = Class.forName(classname, true, classLoader).asSubclass(xface);<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>    } catch (java.lang.ClassNotFoundException nfe) {<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>      throw new IOException("Could not find class for " + classname);<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span>    }<a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>    T service = ReflectionUtils.newInstance(clazz, conf);<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>    service.initialize(server, walFs, logDir, oldLogDir, walProvider);<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>    return service;<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>  }<a name="line.3117"></a>
+<span class="sourceLineNo">3118</span><a name="line.3118"></a>
+<span class="sourceLineNo">3119</span>  public Map&lt;String, ReplicationStatus&gt; getWalGroupsReplicationStatus(){<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>    Map&lt;String, ReplicationStatus&gt; walGroupsReplicationStatus = new TreeMap&lt;&gt;();<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    if(!this.isOnline()){<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>      return walGroupsReplicationStatus;<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>    }<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getSources());<a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>    allSources.addAll(replicationSourceHandler.getReplicationManager().getOldSources());<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>    for(ReplicationSourceInterface source: allSources){<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>      walGroupsReplicationStatus.putAll(source.getWalGroupStatus());<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span>    }<a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    return walGroupsReplicationStatus;<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>  }<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span><a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>  /**<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>   * Utility for constructing an instance of the passed HRegionServer class.<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>   */<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>  static HRegionServer constructRegionServer(<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>      final Class&lt;? extends HRegionServer&gt; regionServerClass,<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      final Configuration conf<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>  ) {<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>    try {<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>      Constructor&lt;? extends HRegionServer&gt; c =<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>          regionServerClass.getConstructor(Configuration.class);<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span>      return c.newInstance(conf);<a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>    } catch (Exception e) {<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>      throw new RuntimeException("Failed construction of " + "Regionserver: "<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>          + regionServerClass.toString(), e);<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>    }<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>  }<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span><a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>  /**<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>   * @see org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>   */<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>  public static void main(String[] args) {<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>    LOG.info("STARTING executorService " + HRegionServer.class.getSimpleName());<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span>    VersionInfo.logVersion();<a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>    Configuration conf = HBaseConfiguration.create();<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>    @SuppressWarnings("unchecked")<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>    Class&lt;? extends HRegionServer&gt; regionServerClass = (Class&lt;? extends HRegionServer&gt;) conf<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>        .getClass(HConstants.REGION_SERVER_IMPL, HRegionServer.class);<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span><a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>    new HRegionServerCommandLine(regionServerClass).doMain(args);<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span>  }<a name="line.3162"></a>
+<span class="sourceLineNo">3163</span><a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>  /**<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>   * Gets the online regions of the specified table.<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>   * This method looks at the in-memory onlineRegions.  It does not go to &lt;code&gt;hbase:meta&lt;/code&gt;.<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>   * Only returns &lt;em&gt;online&lt;/em&gt; regions.  If a region on this table has been<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>   * closed during a disable, etc., it will not be included in the returned list.<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span>   * So, the returned list may not necessarily be ALL regions in this table, its<a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>   * all the ONLINE regions in the table.<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>   * @param tableName table to limit the scope of the query<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>   * @return Online regions from &lt;code&gt;tableName&lt;/code&gt;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>   */<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span>  @Override<a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>  public List&lt;HRegion&gt; getRegions(TableName tableName) {<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>     List&lt;HRegion&gt; tableRegions = new ArrayList&lt;&gt;();<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>     synchronized (this.onlineRegions) {<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>       for (HRegion region: this.onlineRegions.values()) {<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>         RegionInfo regionInfo = region.getRegionInfo();<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>         if(regionInfo.getTable().equals(tableName)) {<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>           tableRegions.add(region);<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>         }<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>       }<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>     }<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>     return tableRegions;<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span>   }<a name="line.3186"></a>
+<span class="sourceLineNo">3187</span><a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>  @Override<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>  public List&lt;HRegion&gt; getRegions() {<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    List&lt;HRegion&gt; allRegions;<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>    synchronized (this.onlineRegions) {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>      // Return a clone copy of the onlineRegions<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>      allRegions = new ArrayList&lt;&gt;(onlineRegions.values());<a name="line.3193"></a>
 <span class="sourceLineNo">3194</span>    }<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>    return tables;<a name="line.3195"></a>
+<span class="sourceLineNo">3195</span>    return allRegions;<a name="line.3195"></a>
 <span class="sourceLineNo">3196</span>  }<a name="line.3196"></a>
 <span class="sourceLineNo">3197</span><a name="line.3197"></a>
-<span class="sourceLineNo">3198</span>  public String[] getRegionServerCoprocessors() {<a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span>    try {<a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span>    } catch (IOException exception) {<a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span>          "skipping.");<a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>    }<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    for (HRegion region: regions) {<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>      try {<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>      } catch (IOException exception) {<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>            "; skipping.");<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>      }<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span>    }<a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>    return coprocessors.toArray(new String[0]);<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>  }<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span><a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>  /**<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>   * @param region Region to close<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>   */<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>    try {<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>            " - ignoring and continuing");<a name="line.3230"></a>
+<span class="sourceLineNo">3198</span>  /**<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>   * Gets the online tables in this RS.<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>   * This method looks at the in-memory onlineRegions.<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span>   * @return all the online tables in this RS<a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>   */<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span>  public Set&lt;TableName&gt; getOnlineTables() {<a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    Set&lt;TableName&gt; tables = new HashSet&lt;&gt;();<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span>    synchronized (this.onlineRegions) {<a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>      for (Region region: this.onlineRegions.values()) {<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span>        tables.add(region.getTableDescriptor().getTableName());<a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>      }<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>    }<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>    return tables;<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>  }<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span><a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>  public String[] getRegionServerCoprocessors() {<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span>    TreeSet&lt;String&gt; coprocessors = new TreeSet&lt;&gt;();<a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>    try {<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span>      coprocessors.addAll(getWAL(null).getCoprocessorHost().getCoprocessors());<a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>    } catch (IOException exception) {<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span>      LOG.warn("Exception attempting to fetch wal coprocessor information for the common wal; " +<a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>          "skipping.");<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span>      LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>    }<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>    Collection&lt;HRegion&gt; regions = getOnlineRegionsLocalContext();<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>    for (HRegion region: regions) {<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>      coprocessors.addAll(region.getCoprocessorHost().getCoprocessors());<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>      try {<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>        coprocessors.addAll(getWAL(region.getRegionInfo()).getCoprocessorHost().getCoprocessors());<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span>      } catch (IOException exception) {<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>        LOG.warn("Exception attempting to fetch wal coprocessor information for region " + region +<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span>            "; skipping.");<a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>        LOG.debug("Exception details for failure to fetch wal coprocessor information.", exception);<a name="line.3230"></a>
 <span class="sourceLineNo">3231</span>      }<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span>    } catch (IOException e) {<a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>          " - ignoring and continuing", e);<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>    }<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>  }<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span><a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>  /**<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>   *<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>   * &lt;p&gt;<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>   * &lt;/p&gt;<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span><a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>   * &lt;p&gt;<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>   * &lt;/p&gt;<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>   *<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>   * @param encodedName Region to close<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>   * @param abort True if we are aborting<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>   * @return True if closed a region.<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>   * @throws NotServingRegionException if the region is not online<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>   */<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>        final ServerName destination)<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>      throws NotServingRegionException {<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>    //Check for permissions to close.<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>    // Can be null if we're calling close on a region that's not online<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>      try {<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span>      } catch (IOException exp) {<a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>        return false;<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>      }<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span>    }<a name="line.3270"></a>
-<span class="sourceLineNo">3271</span><a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>    // previous can come back 'null' if not in map.<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span>        Boolean.FALSE);<a name="line.3274"></a>
-<span class="sourceLineNo">3275</span><a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>        // We're going to try to do a standard close then.<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span>            " Doing a standard close now");<a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>        return closeRegion(encodedName, abort, destination);<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>      }<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>      // Let's get the region from the online region list again<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span>      actualRegion = this.getRegion(encodedName);<a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>        // The master deletes the znode when it receives this exception.<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>      }<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>    } else if (previous == null) {<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>      return true;<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>    }<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span><a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>    if (actualRegion == null) {<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span>      // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>          " is not online, and is not opening.");<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>    }<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span><a name="line.3309"></a>
-<span class="sourceLineNo">3310</span>    CloseRegionHandler crh;<a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>    if (hri.isMetaRegion()) {<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>    } else {<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>    }<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>    this.executorService.submit(crh);<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>    return true;<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>  }<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span><a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>   /**<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>   *         named region is not member of the online regions.<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>   */<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>  }<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span><a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>  @Override<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>  }<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span><a name="line.3334"></a>
+<span class="sourceLineNo">3232</span>    }<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>    coprocessors.addAll(rsHost.getCoprocessors());<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>    return coprocessors.toArray(new String[0]);<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span>  }<a name="line.3235"></a>
+<span class="sourceLineNo">3236</span><a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>  /**<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>   * Try to close the region, logs a warning on failure but continues.<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>   * @param region Region to close<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>   */<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>  private void closeRegionIgnoreErrors(RegionInfo region, final boolean abort) {<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span>    try {<a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>      if (!closeRegion(region.getEncodedName(), abort, null)) {<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>        LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>            " - ignoring and continuing");<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>      }<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>    } catch (IOException e) {<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>      LOG.warn("Failed to close " + region.getRegionNameAsString() +<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span>          " - ignoring and continuing", e);<a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>    }<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>  }<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span><a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>  /**<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>   * Close asynchronously a region, can be called from the master or internally by the regionserver<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>   * when stopping. If called from the master, the region will update the status.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>   *<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>   * &lt;p&gt;<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>   * If an opening was in progress, this method will cancel it, but will not start a new close. The<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>   * coprocessors are not called in this case. A NotServingRegionException exception is thrown.<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>   * &lt;/p&gt;<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span><a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>   * &lt;p&gt;<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>   *   If a close was in progress, this new request will be ignored, and an exception thrown.<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>   * &lt;/p&gt;<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>   *<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>   * @param encodedName Region to close<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>   * @param abort True if we are aborting<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>   * @param destination Where the Region is being moved too... maybe null if unknown.<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span>   * @return True if closed a region.<a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>   * @throws NotServingRegionException if the region is not online<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>   */<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>  protected boolean closeRegion(String encodedName, final boolean abort,<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span>        final ServerName destination)<a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>      throws NotServingRegionException {<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>    //Check for permissions to close.<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>    HRegion actualRegion = this.getRegion(encodedName);<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span>    // Can be null if we're calling close on a region that's not online<a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>    if ((actualRegion != null) &amp;&amp; (actualRegion.getCoprocessorHost() != null)) {<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>      try {<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>        actualRegion.getCoprocessorHost().preClose(false);<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span>      } catch (IOException exp) {<a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>        LOG.warn("Unable to close region: the coprocessor launched an error ", exp);<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>        return false;<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>      }<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    }<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span><a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>    // previous can come back 'null' if not in map.<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>    final Boolean previous = this.regionsInTransitionInRS.putIfAbsent(Bytes.toBytes(encodedName),<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>        Boolean.FALSE);<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span><a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>    if (Boolean.TRUE.equals(previous)) {<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>      LOG.info("Received CLOSE for the region:" + encodedName + " , which we are already " +<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>          "trying to OPEN. Cancelling OPENING.");<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>      if (!regionsInTransitionInRS.replace(Bytes.toBytes(encodedName), previous, Boolean.FALSE)) {<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>        // The replace failed. That should be an exceptional case, but theoretically it can happen.<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>        // We're going to try to do a standard close then.<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>        LOG.warn("The opening for region " + encodedName + " was done before we could cancel it." +<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>            " Doing a standard close now");<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>        return closeRegion(encodedName, abort, destination);<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>      }<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>      // Let's get the region from the online region list again<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>      actualRegion = this.getRegion(encodedName);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>      if (actualRegion == null) { // If already online, we still need to close it.<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>        LOG.info("The opening previously in progress has been cancelled by a CLOSE request.");<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>        // The master deletes the znode when it receives this exception.<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>        throw new NotServingRegionException("The region " + encodedName +<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>          " was opening but not yet served. Opening is cancelled.");<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span>      }<a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    } else if (previous == null) {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      LOG.info("Received CLOSE for {}", encodedName);<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>    } else if (Boolean.FALSE.equals(previous)) {<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>      LOG.info("Received CLOSE for the region: " + encodedName +<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span>        ", which we are already trying to CLOSE, but not completed yet");<a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>      return true;<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>    }<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span><a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>    if (actualRegion == null) {<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>      LOG.debug("Received CLOSE for a region which is not online, and we're not opening.");<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>      this.regionsInTransitionInRS.remove(Bytes.toBytes(encodedName));<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>      // The master deletes the znode when it receives this exception.<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>      throw new NotServingRegionException("The region " + encodedName +<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>          " is not online, and is not opening.");<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>    }<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span><a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>    CloseRegionHandler crh;<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>    final RegionInfo hri = actualRegion.getRegionInfo();<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>    if (hri.isMetaRegion()) {<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>      crh = new CloseMetaHandler(this, this, hri, abort);<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>    } else {<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>      crh = new CloseRegionHandler(this, this, hri, abort, destination);<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>    }<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>    this.executorService.submit(crh);<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>    return true;<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>  }<a name="line.3334"></a>
 <span class="sourceLineNo">3335</span><a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>  @Override<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>    if (destination != null) {<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>      }<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>      if (selfMove) {<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>      }<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>    }<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>    configurationManager.deregisterObserver(r);<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>    return toReturn != null;<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>  }<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span><a name="line.3358"></a>
-<span class="sourceLineNo">3359</span>  /**<a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>   *<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>   */<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>      throws NotServingRegionException {<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>  }<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span><a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>      throws NotServingRegionException {<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>  }<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span><a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>    throws NotServingRegionException {<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span>    if (region == null) {<a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>      if (moveInfo != null) {<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span>      }<a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>      String regionNameStr = regionName == null?<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>          " is opening on " + this.serverName);<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>      }<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>        " is not online on " + this.serverName);<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>    }<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>    return region;<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>  }<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span><a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>  /**<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>   * IOE if it isn't already.<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>   *<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>   * @param t Throwable<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>   * @param msg Message to log in error. Can be null.<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>   */<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>    if (t instanceof NotServingRegionException) {<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>      return t;<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>    }<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>    if (msg == null) {<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>      LOG.error("", e);<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>    } else {<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>      LOG.error(msg, e);<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>    }<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>      checkFileSystem();<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>    }<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>    return t;<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>  }<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span><a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>  /**<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>   */<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>  }<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span><a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>  /**<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>   * abortRequested and stopRequested<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>   *<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>   * @return false if file system is not available<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>   */<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>  boolean checkFileSystem() {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>      try {<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>      } catch (IOException e) {<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>        abort("File System not available", e);<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>        this.dataFsOk = false;<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>      }<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span>    }<a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>    return this.dataFsOk;<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>  }<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span><a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>  @Override<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>          favoredNodes.get(i).getPort());<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>  }<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span><a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>  /**<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>   *<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>   * @return array of favored locations<a name="line.3467"></a>
-<span class="sourceLineNo">3468</span>   */<a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>  @Override<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>  }<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span><a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>  @Override<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>  public ServerNonceManager getNonceManager() {<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>    return this.nonceManager;<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span>  }<a name="line.3477"></a>
-<span class="sourceLineNo">3478</span><a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>  private static class MovedRegionInfo {<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>    private final ServerName serverName;<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>    private final long seqNum;<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span><a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>      this.serverName = serverName;<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>      this.seqNum = closeSeqNum;<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>     }<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span><a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>    public ServerName getServerName() {<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>      return serverName;<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>    }<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span><a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>    public long getSeqNum() {<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>      return seqNum;<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>    }<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>  }<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span><a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>  /**<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>   * the number of network calls instead of reducing them.<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span>   */<a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3501"></a>
+<span class="sourceLineNo">3336</span>   /**<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>   * @return HRegion for the passed binary &lt;code&gt;regionName&lt;/code&gt; or null if<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>   *         named region is not member of the online regions.<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>   */<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>  public HRegion getOnlineRegion(final byte[] regionName) {<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>  }<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span><a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>  @Override<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>  public HRegion getRegion(final String encodedRegionName) {<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>    return this.onlineRegions.get(encodedRegionName);<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>  }<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span><a name="line.3349"></a>
+<span class="sourceLineNo">3350</span><a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>  @Override<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>  public boolean removeRegion(final HRegion r, ServerName destination) {<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span>    HRegion toReturn = this.onlineRegions.remove(r.getRegionInfo().getEncodedName());<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>    metricsRegionServerImpl.requestsCountCache.remove(r.getRegionInfo().getEncodedName());<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>    if (destination != null) {<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>      long closeSeqNum = r.getMaxFlushedSeqId();<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>      if (closeSeqNum == HConstants.NO_SEQNUM) {<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>        // No edits in WAL for this region; get the sequence number when the region was opened.<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>        closeSeqNum = r.getOpenSeqNum();<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>        if (closeSeqNum == HConstants.NO_SEQNUM) closeSeqNum = 0;<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>      }<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span>      boolean selfMove = ServerName.isSameAddress(destination, this.getServerName());<a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>      addToMovedRegions(r.getRegionInfo().getEncodedName(), destination, closeSeqNum, selfMove);<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>      if (selfMove) {<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>        this.regionServerAccounting.getRetainedRegionRWRequestsCnt().put(r.getRegionInfo().getEncodedName()<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>          , new Pair&lt;&gt;(r.getReadRequestsCount(), r.getWriteRequestsCount()));<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>      }<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>    }<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>    this.regionFavoredNodesMap.remove(r.getRegionInfo().getEncodedName());<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>    configurationManager.deregisterObserver(r);<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>    return toReturn != null;<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>  }<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span><a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>  /**<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>   * Protected Utility method for safely obtaining an HRegion handle.<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>   *<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>   * @param regionName Name of online {@link HRegion} to return<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>   * @return {@link HRegion} for &lt;code&gt;regionName&lt;/code&gt;<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>   */<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>  protected HRegion getRegion(final byte[] regionName)<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>      throws NotServingRegionException {<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span>    String encodedRegionName = RegionInfo.encodeRegionName(regionName);<a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>    return getRegionByEncodedName(regionName, encodedRegionName);<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>  }<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span><a name="line.3385"></a>
+<span class="sourceLineNo">3386</span>  public HRegion getRegionByEncodedName(String encodedRegionName)<a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>      throws NotServingRegionException {<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>    return getRegionByEncodedName(null, encodedRegionName);<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>  }<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span><a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>  private HRegion getRegionByEncodedName(byte[] regionName, String encodedRegionName)<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>    throws NotServingRegionException {<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>    HRegion region = this.onlineRegions.get(encodedRegionName);<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>    if (region == null) {<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>      MovedRegionInfo moveInfo = getMovedRegion(encodedRegionName);<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>      if (moveInfo != null) {<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>        throw new RegionMovedException(moveInfo.getServerName(), moveInfo.getSeqNum());<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>      }<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>      Boolean isOpening = this.regionsInTransitionInRS.get(Bytes.toBytes(encodedRegionName));<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>      String regionNameStr = regionName == null?<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>        encodedRegionName: Bytes.toStringBinary(regionName);<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>      if (isOpening != null &amp;&amp; isOpening) {<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>        throw new RegionOpeningException("Region " + regionNameStr +<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>          " is opening on " + this.serverName);<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>      }<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span>      throw new NotServingRegionException("" + regionNameStr +<a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>        " is not online on " + this.serverName);<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>    }<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>    return region;<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>  }<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span><a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>  /**<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>   * Cleanup after Throwable caught invoking method. Converts &lt;code&gt;t&lt;/code&gt; to<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>   * IOE if it isn't already.<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>   *<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>   * @param t Throwable<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>   * @param msg Message to log in error. Can be null.<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>   * @return Throwable converted to an IOE; methods can only let out IOEs.<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>   */<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>  private Throwable cleanup(final Throwable t, final String msg) {<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>    // Don't log as error if NSRE; NSRE is 'normal' operation.<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>    if (t instanceof NotServingRegionException) {<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>      LOG.debug("NotServingRegionException; " + t.getMessage());<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>      return t;<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>    }<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>    Throwable e = t instanceof RemoteException ? ((RemoteException) t).unwrapRemoteException() : t;<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>    if (msg == null) {<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>      LOG.error("", e);<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>    } else {<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>      LOG.error(msg, e);<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>    }<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>    if (!rpcServices.checkOOME(t)) {<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>      checkFileSystem();<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>    }<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>    return t;<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>  }<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span><a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>  /**<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>   * @param msg Message to put in new IOE if passed &lt;code&gt;t&lt;/code&gt; is not an IOE<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>   * @return Make &lt;code&gt;t&lt;/code&gt; an IOE if it isn't already.<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>   */<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>  private IOException convertThrowableToIOE(final Throwable t, final String msg) {<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>    return (t instanceof IOException ? (IOException) t : msg == null<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>        || msg.length() == 0 ? new IOException(t) : new IOException(msg, t));<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>  }<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span><a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>  /**<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>   * Checks to see if the file system is still accessible. If not, sets<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span>   * abortRequested and stopRequested<a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>   *<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>   * @return false if file system is not available<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>   */<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>  boolean checkFileSystem() {<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span>    if (this.dataFsOk &amp;&amp; this.dataFs != null) {<a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>      try {<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        FSUtils.checkFileSystemAvailable(this.dataFs);<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      } catch (IOException e) {<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>        abort("File System not available", e);<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>        this.dataFsOk = false;<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span>      }<a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>    }<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>    return this.dataFsOk;<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>  }<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span><a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>  @Override<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>  public void updateRegionFavoredNodesMapping(String encodedRegionName,<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      List&lt;org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos.ServerName&gt; favoredNodes) {<a name="line.3467"></a>
+<span class="sourceLineNo">3468</span>    InetSocketAddress[] addr = new InetSocketAddress[favoredNodes.size()];<a name="line.3468"></a>
+<span class="sourceLineNo">3469</span>    // Refer to the comment on the declaration of regionFavoredNodesMap on why<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>    // it is a map of region name to InetSocketAddress[]<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span>    for (int i = 0; i &lt; favoredNodes.size(); i++) {<a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>      addr[i] = InetSocketAddress.createUnresolved(favoredNodes.get(i).getHostName(),<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>          favoredNodes.get(i).getPort());<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>    }<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>    regionFavoredNodesMap.put(encodedRegionName, addr);<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>  }<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span><a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>  /**<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>   * Return the favored nodes for a region given its encoded name. Look at the<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span>   * comment around {@link #regionFavoredNodesMap} on why it is InetSocketAddress[]<a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>   *<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>   * @return array of favored locations<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>   */<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>  @Override<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>  public InetSocketAddress[] getFavoredNodesForRegion(String encodedRegionName) {<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>    return regionFavoredNodesMap.get(encodedRegionName);<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>  }<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span><a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>  @Override<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>  public ServerNonceManager getNonceManager() {<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>    return this.nonceManager;<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>  }<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span><a name="line.3493"></a>
+<span class="sourceLineNo">3494</span>  private static class MovedRegionInfo {<a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>    private final ServerName serverName;<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>    private final long seqNum;<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span><a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>    MovedRegionInfo(ServerName serverName, long closeSeqNum) {<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>      this.serverName = serverName;<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>      this.seqNum = closeSeqNum;<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>     }<a name="line.3501"></a>
 <span class="sourceLineNo">3502</span><a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>    if (selfMove) {<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span>      return;<a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>    }<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>        closeSeqNum);<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>  }<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span><a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>  }<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span><a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>  @VisibleForTesting<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>  }<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span><a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>  @VisibleForTesting<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>  public int movedRegionCacheExpiredTime() {<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span>        return TIMEOUT_REGION_MOVED;<a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>  }<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span><a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>  private String getMyEphemeralNodePath() {<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>  }<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span><a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>  private boolean isHealthCheckerConfigured() {<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>  }<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span><a name="line.3535"></a>
-<span class="sourceLineNo">3536</span>  /**<a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span>   */<a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>  public CompactSplit getCompactSplitThread() {<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>    return this.compactSplitThread;<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>  }<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span><a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>    try {<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>      String serviceName = call.getServiceName();<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>      if (service == null) {<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span>            serviceName);<a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>      }<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>      ServiceDescriptor serviceDesc =<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>          service.getDescriptorForType();<a name="line.3556"></a>
+<span class="sourceLineNo">3503</span>    public ServerName getServerName() {<a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>      return serverName;<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>    }<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span><a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>    public long getSeqNum() {<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>      return seqNum;<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span>    }<a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>  }<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span><a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>  /**<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>   * We need a timeout. If not there is a risk of giving a wrong information: this would double<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>   * the number of network calls instead of reducing them.<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>   */<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>  private static final int TIMEOUT_REGION_MOVED = (2 * 60 * 1000);<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span><a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>  private void addToMovedRegions(String encodedName, ServerName destination, long closeSeqNum, boolean selfMove) {<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>    if (selfMove) {<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>      LOG.warn("Not adding moved region record: " + encodedName + " to self.");<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span>      return;<a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>    }<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>    LOG.info("Adding " + encodedName + " move to " + destination + " record at close sequenceid=" +<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>        closeSeqNum);<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>    movedRegionInfoCache.put(encodedName, new MovedRegionInfo(destination, closeSeqNum));<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>  }<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span><a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>  void removeFromMovedRegions(String encodedName) {<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>    movedRegionInfoCache.invalidate(encodedName);<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>  }<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span><a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>  @VisibleForTesting<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>  public MovedRegionInfo getMovedRegion(String encodedRegionName) {<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>    return movedRegionInfoCache.getIfPresent(encodedRegionName);<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>  }<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span><a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>  @VisibleForTesting<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>  public int movedRegionCacheExpiredTime() {<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span>        return TIMEOUT_REGION_MOVED;<a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>  }<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>  private String getMyEphemeralNodePath() {<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>    return ZNodePaths.joinZNode(this.zooKeeper.getZNodePaths().rsZNode, getServerName().toString());<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>  }<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span><a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>  private boolean isHealthCheckerConfigured() {<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>    String healthScriptLocation = this.conf.get(HConstants.HEALTH_SCRIPT_LOC);<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>    return org.apache.commons.lang3.StringUtils.isNotBlank(healthScriptLocation);<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>  }<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span><a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>  /**<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>   * @return the underlying {@link CompactSplit} for the servers<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>   */<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>  public CompactSplit getCompactSplitThread() {<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>    return this.compactSplitThread;<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span>  }<a name="line.3556"></a>
 <span class="sourceLineNo">3557</span><a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>      String methodName = call.getMethodName();<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>      MethodDescriptor methodDesc =<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>          serviceDesc.findMethodByName(methodName);<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>      if (methodDesc == null) {<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>            " called on executorService " + serviceName);<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>      }<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span><a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>      Message request =<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>      final Message.Builder responseBuilder =<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>        if (message != null) {<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span>          responseBuilder.mergeFrom(message);<a name="line.3572"></a>
-<span class="sourceLineNo">3573</span>        }<a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>      });<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>      if (exception != null) {<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>        throw exception;<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>      }<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>    } catch (IOException ie) {<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>      throw new ServiceException(ie);<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>    }<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>  }<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span><a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>  /**<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>   * May be null if this is a master which not carry table.<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>   *<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span>   * @return The block cache instance used by the regionserver.<a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>   */<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>  @Override<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>    return Optional.ofNullable(this.blockCache);<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span>  }<a name="line.3593"></a>
-<span class="sourceLineNo">3594</span><a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>  /**<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>   * May be null if this is a master which not carry table.<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>   *<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span>   * @return The cache for mob files used by the regionserver.<a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>   */<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>  @Override<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span>  }<a name="line.3603"></a>
-<span class="sourceLineNo">3604</span><a name="line.3604"></a>
+<span class="sourceLineNo">3558</span>  CoprocessorServiceResponse execRegionServerService(<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>      @SuppressWarnings("UnusedParameters") final RpcController controller,<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>      final CoprocessorServiceRequest serviceRequest) throws ServiceException {<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>    try {<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>      ServerRpcController serviceController = new ServerRpcController();<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>      CoprocessorServiceCall call = serviceRequest.getCall();<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>      String serviceName = call.getServiceName();<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>      Service service = coprocessorServiceHandlers.get(serviceName);<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>      if (service == null) {<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>        throw new UnknownProtocolException(null, "No registered coprocessor executorService found for " +<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>            serviceName);<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>      }<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>      ServiceDescriptor serviceDesc =<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>          service.getDescriptorForType();<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span><a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>      String methodName = call.getMethodName();<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>      MethodDescriptor methodDesc =<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span>          serviceDesc.findMethodByName(methodName);<a name="line.3575"></a>
+<span class="sourceLineNo">3576</span>      if (methodDesc == null) {<a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>        throw new UnknownProtocolException(service.getClass(), "Unknown method " + methodName +<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>            " called on executorService " + serviceName);<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>      }<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span><a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>      Message request =<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>          CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>      final Message.Builder responseBuilder =<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>          service.getResponsePrototype(methodDesc).newBuilderForType();<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>      service.callMethod(methodDesc, serviceController, request, message -&gt; {<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>        if (message != null) {<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>          responseBuilder.mergeFrom(message);<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>        }<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      });<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>      IOException exception = CoprocessorRpcUtils.getControllerException(serviceController);<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span>      if (exception != null) {<a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>        throw exception;<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>      }<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>      return CoprocessorRpcUtils.getResponse(responseBuilder.build(), HConstants.EMPTY_BYTE_ARRAY);<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>    } catch (IOException ie) {<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span>      throw new ServiceException(ie);<a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>    }<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>  }<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span><a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>  /**<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span>   * May be null if this is a master which not carry table.<a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>   *<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>   * @return The block cache instance used by the regionserver.<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>   */<a name="line.3604"></a>
 <span class="sourceLineNo">3605</span>  @Override<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>  public AccessChecker getAccessChecker() {<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>    return rpcServices.getAccessChecker();<a name="line.3607"></a>
+<span class="sourceLineNo">3606</span>  public Optional&lt;BlockCache&gt; getBlockCache() {<a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>    return Optional.ofNullable(this.blockCache);<a name="line.3607"></a>
 <span class="sourceLineNo">3608</span>  }<a name="line.3608"></a>
 <span class="sourceLineNo">3609</span><a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>  @Override<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span>  }<a name="line.3613"></a>
-<span class="sourceLineNo">3614</span><a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>  /**<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>   */<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span>  @VisibleForTesting<a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>  ConfigurationManager getConfigurationManager() {<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    return configurationManager;<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>  }<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span><a name="line.3622"></a>
-<span class="sourceLineNo">3623</span>  /**<a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>   * @return Return table descriptors implementation.<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>   */<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>  @Override<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>  public TableDescriptors getTableDescriptors() {<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span>    return this.tableDescriptors;<a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>  }<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span><a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>  /**<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>   * Reload the configuration from disk.<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span>   */<a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>  void updateConfiguration() {<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>    // Reload the configuration from disk.<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>    conf.reloadConfiguration();<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>    configurationManager.notifyAllObservers(conf);<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>  }<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span><a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>    long evictedBlocks = 0;<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span><a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>    for(Store store : region.getStores()) {<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>      }<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>    }<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span><a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>    return CacheEvictionStats.builder()<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>        .build();<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>  }<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span><a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>  @Override<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>  public double getCompactionPressure() {<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>    double max = 0;<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>    for (Region region : onlineRegions.values()) {<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>      for (Store store : region.getStores()) {<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>        double normCount = store.getCompactionPressure();<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>        if (normCount &gt; max) {<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span>          max = normCount;<a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>        }<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>      }<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>    }<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>    return max;<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>  }<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span><a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>  @Override<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>    return hMemManager;<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>  }<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span><a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>    return cacheFlusher;<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>  }<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span><a name="line.3677"></a>
-<span class="sourceLineNo">3678</span>  /**<a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>   * For testing<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>   */<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>  @VisibleForTesting<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>  public boolean walRollRequestFinished() {<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>    return this.walRoller.walRollFinished();<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>  }<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span><a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>  @Override<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>  public ThroughputController getFlushThroughputController() {<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>    return flushThroughputController;<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>  }<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span><a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>  @Override<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span>  public double getFlushPressure() {<a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>      // return 0 during RS initialization<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>      return 0.0;<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>    }<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span>  }<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span><a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>  @Override<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>    ThroughputController old = this.flushThroughputController;<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>    if (old != null) {<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>      old.stop("configuration change");<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>    }<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>    try {<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>      Superusers.initialize(newConf);<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>    } catch (IOException e) {<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3711"></a>
+<span class="sourceLineNo">3610</span>  /**<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span>   * May be null if this is a master which not carry table.<a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>   *<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>   * @return The cache for mob files used by the regionserver.<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>   */<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>  @Override<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span>  public Optional&lt;MobFileCache&gt; getMobFileCache() {<a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>    return Optional.ofNullable(this.mobFileCache);<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>  }<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span><a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>  @Override<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span>  public AccessChecker getAccessChecker() {<a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    return rpcServices.getAccessChecker();<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>  }<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span><a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>  @Override<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span>  public ZKPermissionWatcher getZKPermissionWatcher() {<a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>    return rpcServices.getZkPermissionWatcher();<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>  }<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span><a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>  /**<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span>   * @return : Returns the ConfigurationManager object for testing purposes.<a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>   */<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>  @VisibleForTesting<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>  ConfigurationManager getConfigurationManager() {<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>    return configurationManager;<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span>  }<a name="line.3636"></a>
+<span class="sourceLineNo">3637</span><a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>  /**<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>   * @return Return table descriptors implementation.<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>   */<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>  @Override<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>  public TableDescriptors getTableDescriptors() {<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>    return this.tableDescriptors;<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>  }<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span><a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>  /**<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>   * Reload the configuration from disk.<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>   */<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>  void updateConfiguration() {<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>    LOG.info("Reloading the configuration from disk.");<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>    // Reload the configuration from disk.<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>    conf.reloadConfiguration();<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>    configurationManager.notifyAllObservers(conf);<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>  }<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span><a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>  CacheEvictionStats clearRegionBlockCache(Region region) {<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>    long evictedBlocks = 0;<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span><a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>    for(Store store : region.getStores()) {<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>      for(StoreFile hFile : store.getStorefiles()) {<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>        evictedBlocks += blockCache.evictBlocksByHfileName(hFile.getPath().getName());<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>      }<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>    }<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span><a name="line.3664"></a>
+<span class="sourceLineNo">3665</span>    return CacheEvictionStats.builder()<a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>        .withEvictedBlocks(evictedBlocks)<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>        .build();<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>  }<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span><a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>  @Override<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>  public double getCompactionPressure() {<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>    double max = 0;<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>    for (Region region : onlineRegions.values()) {<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>      for (Store store : region.getStores()) {<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        double normCount = store.getCompactionPressure();<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>        if (normCount &gt; max) {<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span>          max = normCount;<a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>        }<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      }<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span>    return max;<a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>  }<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span><a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>  @Override<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>  public HeapMemoryManager getHeapMemoryManager() {<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>    return hMemManager;<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>  }<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span><a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>  MemStoreFlusher getMemStoreFlusher() {<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>    return cacheFlusher;<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>  }<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span><a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>  /**<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>   * For testing<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>   * @return whether all wal roll request finished for this regionserver<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span>   */<a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>  @VisibleForTesting<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>  public boolean walRollRequestFinished() {<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>    return this.walRoller.walRollFinished();<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>  }<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span><a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>  @Override<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span>  public ThroughputController getFlushThroughputController() {<a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>    return flushThroughputController;<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>  }<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span><a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>  @Override<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>  public double getFlushPressure() {<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>    if (getRegionServerAccounting() == null || cacheFlusher == null) {<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span>      // return 0 during RS initialization<a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      return 0.0;<a name="line.3711"></a>
 <span class="sourceLineNo">3712</span>    }<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>  }<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span><a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>  @Override<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>  public MetricsRegionServer getMetrics() {<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>    return metricsRegionServer;<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>  }<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span><a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>  @Override<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>    return this.secureBulkLoadManager;<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>  }<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span><a name="line.3724"></a>
-<span class="sourceLineNo">3725</span>  @Override<a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>      final Abortable abort) {<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>    final LockServiceClient client =<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>  }<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span><a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>  @Override<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span>  }<a name="line.3736"></a>
-<span class="sourceLineNo">3737</span><a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>  @Override<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>    return this.rsSpaceQuotaManager;<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>  }<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span><a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>  @Override<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span>      // the current server could be stopping.<a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>      return false;<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>    }<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span>    try {<a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>      rss.reportFileArchival(null, request);<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>    } catch (ServiceException se) {<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>        if (LOG.isTraceEnabled()) {<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>              + " This will be retried.", ioe);<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>        }<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>        return false;<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>      }<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>      if (rssStub == rss) {<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>        rssStub = null;<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>      }<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>      // re-create the stub if we failed to report the archival<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span>      createRegionServerStatusStub(true);<a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>      return false;<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>    }<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>    return true;<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>  }<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span><a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>    return eventLoopGroupConfig;<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>  }<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span><a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>  @Override<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>  }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span><a name="line.3786"></a>
-<span class="sourceLineNo">3787</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>  }<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span><a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>    procedureResultReporter.complete(procId, error);<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>  }<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span><a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>    for (;;) {<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>      rss = rssStub;<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>      if (rss != null) {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>        break;<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>      }<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>      createRegionServerStatusStub();<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>    }<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>    try {<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>      rss.reportProcedureDone(null, request);<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>    } catch (ServiceException se) {<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>      if (rssStub == rss) {<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>        rssStub = null;<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>      }<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>    }<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>  }<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span><a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>  /**<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>   *<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>   *<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>   *<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>   * See HBASE-22404 for more details.<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span>   *<a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>   * @param procId the id of the open/close region procedure<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>   * @return true if the procedure can be submitted.<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>   */<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>  boolean submitRegionProcedure(long procId) {<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>    if (procId == -1) {<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span>      return true;<a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>    }<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>    // Ignore the region procedures which already submitted.<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>    if (previous != null) {<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>      return false;<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>    }<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>    // Ignore the region procedures which already executed.<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>      return false;<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>    }<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span>    return true;<a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>  }<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span><a name="line.3850"></a>
-<span class="sourceLineNo">3851</span>  /**<a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>   * @param procId the id of the open/close region procedure<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>   */<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span>  public void finishRegionProcedure(long procId) {<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>    executedRegionProcedures.put(procId, procId);<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>    submittedRegionProcedures.remove(procId);<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span>  }<a name="line.3858"></a>
-<span class="sourceLineNo">3859</span><a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>  public boolean isShutDown() {<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>    return shutDown;<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>  }<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span><a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>  /**<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>   * Force to terminate region server when abort timeout.<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>   */<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span><a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>    public SystemExitWhenAbortTimeout() {<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>    }<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span><a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>    @Override<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>    public void run() {<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>          " Thread dump to stdout.");<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>      Runtime.getRuntime().halt(1);<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>    }<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>  }<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span><a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>  @Override<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span>    return asyncClusterConnection;<a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>  }<a name="line.3885"></a>
+<span class="sourceLineNo">3713</span>    return getRegionServerAccounting().getFlushPressure();<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>  }<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span><a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>  @Override<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span>  public void onConfigurationChange(Configuration newConf) {<a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    ThroughputController old = this.flushThroughputController;<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>    if (old != null) {<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>      old.stop("configuration change");<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>    }<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>    this.flushThroughputController = FlushThroughputControllerFactory.create(this, newConf);<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>    try {<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>      Superusers.initialize(newConf);<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>    } catch (IOException e) {<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>      LOG.warn("Failed to initialize SuperUsers on reloading of the configuration");<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    }<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span>  }<a name="line.3728"></a>
+<span class="sourceLineNo">3729</span><a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>  @Override<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>  public MetricsRegionServer getMetrics() {<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span>    return metricsRegionServer;<a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>  }<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span><a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>  @Override<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>  public SecureBulkLoadManager getSecureBulkLoadManager() {<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>    return this.secureBulkLoadManager;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>  }<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span><a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>  @Override<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>  public EntityLock regionLock(final List&lt;RegionInfo&gt; regionInfo, final String description,<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>      final Abortable abort) {<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>    final LockServiceClient client =<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>        new LockServiceClient(conf, lockStub, asyncClusterConnection.getNonceGenerator());<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>    return client.regionLock(regionInfo, description, abort);<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>  }<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span><a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>  @Override<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>  public void unassign(byte[] regionName) throws IOException {<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>    FutureUtils.get(asyncClusterConnection.getAdmin().unassign(regionName, false));<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span>  }<a name="line.3751"></a>
+<span class="sourceLineNo">3752</span><a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>  @Override<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>  public RegionServerSpaceQuotaManager getRegionServerSpaceQuotaManager() {<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span>    return this.rsSpaceQuotaManager;<a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>  }<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span><a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>  @Override<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>  public boolean reportFileArchivalForQuotas(TableName tableName,<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>      Collection&lt;Entry&lt;String, Long&gt;&gt; archivedFiles) {<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>    RegionServerStatusService.BlockingInterface rss = rssStub;<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>    if (rss == null || rsSpaceQuotaManager == null) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>      // the current server could be stopping.<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>      LOG.trace("Skipping file archival reporting to HMaster as stub is null");<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>      return false;<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>    }<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>    try {<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>      RegionServerStatusProtos.FileArchiveNotificationRequest request =<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>          rsSpaceQuotaManager.buildFileArchiveRequest(tableName, archivedFiles);<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>      rss.reportFileArchival(null, request);<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>    } catch (ServiceException se) {<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>      IOException ioe = ProtobufUtil.getRemoteException(se);<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span>      if (ioe instanceof PleaseHoldException) {<a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        if (LOG.isTraceEnabled()) {<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>          LOG.trace("Failed to report file archival(s) to Master because it is initializing."<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>              + " This will be retried.", ioe);<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>        }<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        // The Master is coming up. Will retry the report later. Avoid re-creating the stub.<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>        return false;<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>      }<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>      if (rssStub == rss) {<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>        rssStub = null;<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>      }<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>      // re-create the stub if we failed to report the archival<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>      createRegionServerStatusStub(true);<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>      LOG.debug("Failed to report file archival(s) to Master. This will be retried.", ioe);<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>      return false;<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>    }<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>    return true;<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span>  }<a name="line.3790"></a>
+<span class="sourceLineNo">3791</span><a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>  public NettyEventLoopGroupConfig getEventLoopGroupConfig() {<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>    return eventLoopGroupConfig;<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>  }<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span><a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>  @Override<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span>  public Connection createConnection(Configuration conf) throws IOException {<a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>    User user = UserProvider.instantiate(conf).getCurrent();<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>    return ConnectionFactory.createConnection(conf, null, user);<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>  }<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span><a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>  void executeProcedure(long procId, RSProcedureCallable callable) {<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>    executorService.submit(new RSProcedureHandler(this, procId, callable));<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>  }<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span><a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>  public void remoteProcedureComplete(long procId, Throwable error) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>    procedureResultReporter.complete(procId, error);<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>  }<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span><a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>  void reportProcedureDone(ReportProcedureDoneRequest request) throws IOException {<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>    RegionServerStatusService.BlockingInterface rss;<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>    // TODO: juggling class state with an instance variable, outside of a synchronized block :'(<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>    for (;;) {<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>      rss = rssStub;<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>      if (rss != null) {<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>        break;<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>      }<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>      createRegionServerStatusStub();<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>    }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span>    try {<a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>      rss.reportProcedureDone(null, request);<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>    } catch (ServiceException se) {<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>      if (rssStub == rss) {<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>        rssStub = null;<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span>      }<a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>      throw ProtobufUtil.getRemoteException(se);<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>    }<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>  }<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span><a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>  /**<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>   * Will ignore the open/close region procedures which already submitted or executed.<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span>   *<a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>   * When master had unfinished open/close region procedure and restarted, new active master may<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>   * send duplicate open/close region request to regionserver. The open/close request is submitted<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>   * to a thread pool and execute. So first need a cache for submitted open/close region procedures.<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>   *<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>   * After the open/close region request executed and report region transition succeed, cache it in<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span>   * executed region procedures cache. See {@link #finishRegionProcedure(long)}. After report region<a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>   * transition succeed, master will not send the open/close region request to regionserver again.<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>   * And we thought that the ongoing duplicate open/close region request should not be delayed more<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>   * than 600 seconds. So the executed region procedures cache will expire after 600 seconds.<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>   *<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>   * See HBASE-22404 for more details.<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>   *<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>   * @param procId the id of the open/close region procedure<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>   * @return true if the procedure can be submitted.<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>   */<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>  boolean submitRegionProcedure(long procId) {<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>    if (procId == -1) {<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>      return true;<a name="line.3850"></a>
+<span class="sourceLineNo">3851</span>    }<a name="line.3851"></a>
+<span class="sourceLineNo">3852</span>    // Ignore the region procedures which already submitted.<a name="line.3852"></a>
+<span class="sourceLineNo">3853</span>    Long previous = submittedRegionProcedures.putIfAbsent(procId, procId);<a name="line.3853"></a>
+<span class="sourceLineNo">3854</span>    if (previous != null) {<a name="line.3854"></a>
+<span class="sourceLineNo">3855</span>      LOG.warn("Received procedure pid={}, which already submitted, just ignore it", procId);<a name="line.3855"></a>
+<span class="sourceLineNo">3856</span>      return false;<a name="line.3856"></a>
+<span class="sourceLineNo">3857</span>    }<a name="line.3857"></a>
+<span class="sourceLineNo">3858</span>    // Ignore the region procedures which already executed.<a name="line.3858"></a>
+<span class="sourceLineNo">3859</span>    if (executedRegionProcedures.getIfPresent(procId) != null) {<a name="line.3859"></a>
+<span class="sourceLineNo">3860</span>      LOG.warn("Received procedure pid={}, which already executed, just ignore it", procId);<a name="line.3860"></a>
+<span class="sourceLineNo">3861</span>      return false;<a name="line.3861"></a>
+<span class="sourceLineNo">3862</span>    }<a name="line.3862"></a>
+<span class="sourceLineNo">3863</span>    return true;<a name="line.3863"></a>
+<span class="sourceLineNo">3864</span>  }<a name="line.3864"></a>
+<span class="sourceLineNo">3865</span><a name="line.3865"></a>
+<span class="sourceLineNo">3866</span>  /**<a name="line.3866"></a>
+<span class="sourceLineNo">3867</span>   * See {@link #submitRegionProcedure(long)}.<a name="line.3867"></a>
+<span class="sourceLineNo">3868</span>   * @param procId the id of the open/close region procedure<a name="line.3868"></a>
+<span class="sourceLineNo">3869</span>   */<a name="line.3869"></a>
+<span class="sourceLineNo">3870</span>  public void finishRegionProcedure(long procId) {<a name="line.3870"></a>
+<span class="sourceLineNo">3871</span>    executedRegionProcedures.put(procId, procId);<a name="line.3871"></a>
+<span class="sourceLineNo">3872</span>    submittedRegionProcedures.remove(procId);<a name="line.3872"></a>
+<span class="sourceLineNo">3873</span>  }<a name="line.3873"></a>
+<span class="sourceLineNo">3874</span><a name="line.3874"></a>
+<span class="sourceLineNo">3875</span>  public boolean isShutDown() {<a name="line.3875"></a>
+<span class="sourceLineNo">3876</span>    return shutDown;<a name="line.3876"></a>
+<span class="sourceLineNo">3877</span>  }<a name="line.3877"></a>
+<span class="sourceLineNo">3878</span><a name="line.3878"></a>
+<span class="sourceLineNo">3879</span>  /**<a name="line.3879"></a>
+<span class="sourceLineNo">3880</span>   * Force to terminate region server when abort timeout.<a name="line.3880"></a>
+<span class="sourceLineNo">3881</span>   */<a name="line.3881"></a>
+<span class="sourceLineNo">3882</span>  private static class SystemExitWhenAbortTimeout extends TimerTask {<a name="line.3882"></a>
+<span class="sourceLineNo">3883</span><a name="line.3883"></a>
+<span class="sourceLineNo">3884</span>    public SystemExitWhenAbortTimeout() {<a name="line.3884"></a>
+<span class="sourceLineNo">3885</span>    }<a name="line.3885"></a>
 <span class="sourceLineNo">3886</span><a name="line.3886"></a>
-<span class="sourceLineNo">3887</span>  @VisibleForTesting<a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>    return compactedFileDischarger;<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>  }<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>}<a name="line.3891"></a>
+<span class="sourceLineNo">3887</span>    @Override<a name="line.3887"></a>
+<span class="sourceLineNo">3888</span>    public void run() {<a name="line.3888"></a>
+<span class="sourceLineNo">3889</span>      LOG.warn("Aborting region server timed out, terminating forcibly" +<a name="line.3889"></a>
+<span class="sourceLineNo">3890</span>          " and does not wait for any running shutdown hooks or finalizers to finish their work." +<a name="line.3890"></a>
+<span class="sourceLineNo">3891</span>          " Thread dump to stdout.");<a name="line.3891"></a>
+<span class="sourceLineNo">3892</span>      Threads.printThreadInfo(System.out, "Zombie HRegionServer");<a name="line.3892"></a>
+<span class="sourceLineNo">3893</span>      Runtime.getRuntime().halt(1);<a name="line.3893"></a>
+<span class="sourceLineNo">3894</span>    }<a name="line.3894"></a>
+<span class="sourceLineNo">3895</span>  }<a name="line.3895"></a>
+<span class="sourceLineNo">3896</span><a name="line.3896"></a>
+<span class="sourceLineNo">3897</span>  @Override<a name="line.3897"></a>
+<span class="sourceLineNo">3898</span>  public AsyncClusterConnection getAsyncClusterConnection() {<a name="line.3898"></a>
+<span class="sourceLineNo">3899</span>    return asyncClusterConnection;<a name="line.3899"></a>
+<span class="sourceLineNo">3900</span>  }<a name="line.3900"></a>
+<span class="sourceLineNo">3901</span><a name="line.3901"></a>
+<span class="sourceLineNo">3902</span>  @VisibleForTesting<a name="line.3902"></a>
+<span class="sourceLineNo">3903</span>  public CompactedHFilesDischarger getCompactedHFilesDischarger() {<a name="line.3903"></a>
+<span class="sourceLineNo">3904</span>    return compactedFileDischarger;<a name="line.3904"></a>
+<span class="sourceLineNo">3905</span>  }<a name="line.3905"></a>
+<span class="sourceLineNo">3906</span>}<a name="line.3906"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html
index 3944e70..9d6c943 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWAL.html
@@ -31,76 +31,78 @@
 <span class="sourceLineNo">023</span><a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.io.IOException;<a name="line.24"></a>
 <span class="sourceLineNo">025</span><a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.slf4j.Logger;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.slf4j.LoggerFactory;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.util.StringUtils;<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> * Class used to push numbers about the WAL into the metrics subsystem.  This will take a<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * single function call and turn it into multiple manipulations of the hadoop metrics system.<a name="line.36"></a>
-<span class="sourceLineNo">037</span> */<a name="line.37"></a>
-<span class="sourceLineNo">038</span>@InterfaceAudience.Private<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public class MetricsWAL implements WALActionsListener {<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  private static final Logger LOG = LoggerFactory.getLogger(MetricsWAL.class);<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  private final MetricsWALSource source;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  public MetricsWAL() {<a name="line.44"></a>
-<span class="sourceLineNo">045</span>    this(CompatibilitySingletonFactory.getInstance(MetricsWALSource.class));<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  }<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  @VisibleForTesting<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  MetricsWAL(MetricsWALSource s) {<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    this.source = s;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span>  @Override<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  public void postSync(final long timeInNanos, final int handlerSyncs) {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    source.incrementSyncTime(timeInNanos/1000000L);<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>  @Override<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  public void postAppend(final long size, final long time, final WALKey logkey,<a name="line.59"></a>
-<span class="sourceLineNo">060</span>      final WALEdit logEdit) throws IOException {<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    source.incrementAppendCount();<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    source.incrementAppendTime(time);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    source.incrementAppendSize(size);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    source.incrementWrittenBytes(size);<a name="line.64"></a>
-<span class="sourceLineNo">065</span><a name="line.65"></a>
-<span class="sourceLineNo">066</span>    if (time &gt; 1000) {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      source.incrementSlowAppendCount();<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      LOG.warn(String.format("%s took %d ms appending an edit to wal; len~=%s",<a name="line.68"></a>
-<span class="sourceLineNo">069</span>          Thread.currentThread().getName(),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>          time,<a name="line.70"></a>
-<span class="sourceLineNo">071</span>          StringUtils.humanReadableInt(size)));<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><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  @Override<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  public void logRollRequested(WALActionsListener.RollRequestReason reason) {<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    source.incrementLogRollRequested();<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    switch (reason) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      case ERROR:<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        source.incrementErrorLogRoll();<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        break;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      case LOW_REPLICATION:<a name="line.82"></a>
-<span class="sourceLineNo">083</span>        source.incrementLowReplicationLogRoll();<a name="line.83"></a>
-<span class="sourceLineNo">084</span>        break;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>      case SIZE:<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        source.incrementSizeLogRoll();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>        break;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      case SLOW_SYNC:<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        source.incrementSlowSyncLogRoll();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        break;<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      default:<a name="line.91"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.TableName;<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.slf4j.Logger;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.slf4j.LoggerFactory;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.util.StringUtils;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>/**<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * Class used to push numbers about the WAL into the metrics subsystem.  This will take a<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * single function call and turn it into multiple manipulations of the hadoop metrics system.<a name="line.37"></a>
+<span class="sourceLineNo">038</span> */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>@InterfaceAudience.Private<a name="line.39"></a>
+<span class="sourceLineNo">040</span>public class MetricsWAL implements WALActionsListener {<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private static final Logger LOG = LoggerFactory.getLogger(MetricsWAL.class);<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  private final MetricsWALSource source;<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  public MetricsWAL() {<a name="line.45"></a>
+<span class="sourceLineNo">046</span>    this(CompatibilitySingletonFactory.getInstance(MetricsWALSource.class));<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  @VisibleForTesting<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  MetricsWAL(MetricsWALSource s) {<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    this.source = s;<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>  @Override<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  public void postSync(final long timeInNanos, final int handlerSyncs) {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    source.incrementSyncTime(timeInNanos/1000000L);<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>  @Override<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public void postAppend(final long size, final long time, final WALKey logkey,<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      final WALEdit logEdit) throws IOException {<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    TableName tableName = logkey.getTableName();<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    source.incrementAppendCount(tableName);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    source.incrementAppendTime(time);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    source.incrementAppendSize(tableName, size);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    source.incrementWrittenBytes(size);<a name="line.66"></a>
+<span class="sourceLineNo">067</span><a name="line.67"></a>
+<span class="sourceLineNo">068</span>    if (time &gt; 1000) {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      source.incrementSlowAppendCount();<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      LOG.warn(String.format("%s took %d ms appending an edit to wal; len~=%s",<a name="line.70"></a>
+<span class="sourceLineNo">071</span>          Thread.currentThread().getName(),<a name="line.71"></a>
+<span class="sourceLineNo">072</span>          time,<a name="line.72"></a>
+<span class="sourceLineNo">073</span>          StringUtils.humanReadableInt(size)));<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
+<span class="sourceLineNo">076</span><a name="line.76"></a>
+<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  public void logRollRequested(WALActionsListener.RollRequestReason reason) {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    source.incrementLogRollRequested();<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    switch (reason) {<a name="line.80"></a>
+<span class="sourceLineNo">081</span>      case ERROR:<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        source.incrementErrorLogRoll();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        break;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      case LOW_REPLICATION:<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        source.incrementLowReplicationLogRoll();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>        break;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      case SIZE:<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        source.incrementSizeLogRoll();<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        break;<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      case SLOW_SYNC:<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        source.incrementSlowSyncLogRoll();<a name="line.91"></a>
 <span class="sourceLineNo">092</span>        break;<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>}<a name="line.95"></a>
+<span class="sourceLineNo">093</span>      default:<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        break;<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>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html
index 1ed9613..0f512dc 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSource.html
@@ -26,105 +26,104 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver.wal;<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.metrics.BaseSource;<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><a name="line.23"></a>
-<span class="sourceLineNo">024</span>/**<a name="line.24"></a>
-<span class="sourceLineNo">025</span> * Interface of the source that will export metrics about the region server's WAL.<a name="line.25"></a>
-<span class="sourceLineNo">026</span> */<a name="line.26"></a>
-<span class="sourceLineNo">027</span>@InterfaceAudience.Private<a name="line.27"></a>
-<span class="sourceLineNo">028</span>public interface MetricsWALSource extends BaseSource {<a name="line.28"></a>
-<span class="sourceLineNo">029</span><a name="line.29"></a>
+<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.TableName;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.metrics.BaseSource;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.23"></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> * Interface of the source that will export metrics about the region server's WAL.<a name="line.26"></a>
+<span class="sourceLineNo">027</span> */<a name="line.27"></a>
+<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
+<span class="sourceLineNo">029</span>public interface MetricsWALSource extends BaseSource {<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>   * The name of the metrics<a name="line.32"></a>
-<span class="sourceLineNo">033</span>   */<a name="line.33"></a>
-<span class="sourceLineNo">034</span>  String METRICS_NAME = "WAL";<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>   * The name of the metrics context that metrics will be under.<a name="line.37"></a>
-<span class="sourceLineNo">038</span>   */<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  String METRICS_CONTEXT = "regionserver";<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>   * Description<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   */<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  String METRICS_DESCRIPTION = "Metrics about HBase RegionServer WAL";<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  /**<a name="line.46"></a>
-<span class="sourceLineNo">047</span>   * The name of the metrics context that metrics will be under in jmx<a name="line.47"></a>
-<span class="sourceLineNo">048</span>   */<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></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>   * The name of the metrics<a name="line.33"></a>
+<span class="sourceLineNo">034</span>   */<a name="line.34"></a>
+<span class="sourceLineNo">035</span>  String METRICS_NAME = "WAL";<a name="line.35"></a>
+<span class="sourceLineNo">036</span><a name="line.36"></a>
+<span class="sourceLineNo">037</span>  /**<a name="line.37"></a>
+<span class="sourceLineNo">038</span>   * The name of the metrics context that metrics will be under.<a name="line.38"></a>
+<span class="sourceLineNo">039</span>   */<a name="line.39"></a>
+<span class="sourceLineNo">040</span>  String METRICS_CONTEXT = "regionserver";<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>   * Description<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   */<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  String METRICS_DESCRIPTION = "Metrics about HBase RegionServer WAL";<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  /**<a name="line.47"></a>
+<span class="sourceLineNo">048</span>   * The name of the metrics context that metrics will be under in jmx<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   */<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  String METRICS_JMX_CONTEXT = "RegionServer,sub=" + METRICS_NAME;<a name="line.50"></a>
 <span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>  String APPEND_TIME = "appendTime";<a name="line.52"></a>
-<span class="sourceLineNo">053</span>  String APPEND_TIME_DESC = "Time an append to the log took.";<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  String APPEND_COUNT = "appendCount";<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  String APPEND_COUNT_DESC = "Number of appends to the write ahead log.";<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  String APPEND_SIZE = "appendSize";<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  String APPEND_SIZE_DESC = "Size (in bytes) of the data appended to the WAL.";<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  String SLOW_APPEND_COUNT = "slowAppendCount";<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  String SLOW_APPEND_COUNT_DESC = "Number of appends that were slow.";<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  String SYNC_TIME = "syncTime";<a name="line.60"></a>
-<span class="sourceLineNo">061</span>  String SYNC_TIME_DESC = "The time it took to sync the WAL to HDFS.";<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  String ROLL_REQUESTED = "rollRequest";<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  String ROLL_REQUESTED_DESC = "How many times a roll has been requested total";<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  String ERROR_ROLL_REQUESTED = "errorRollRequest";<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  String ERROR_ROLL_REQUESTED_DESC =<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      "How many times a roll was requested due to I/O or other errors.";<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  String LOW_REPLICA_ROLL_REQUESTED = "lowReplicaRollRequest";<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  String LOW_REPLICA_ROLL_REQUESTED_DESC =<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      "How many times a roll was requested due to too few datanodes in the write pipeline.";<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  String SLOW_SYNC_ROLL_REQUESTED = "slowSyncRollRequest";<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  String SLOW_SYNC_ROLL_REQUESTED_DESC =<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      "How many times a roll was requested due to sync too slow on the write pipeline.";<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  String SIZE_ROLL_REQUESTED = "sizeRollRequest";<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  String SIZE_ROLL_REQUESTED_DESC =<a name="line.74"></a>
-<span class="sourceLineNo">075</span>      "How many times a roll was requested due to file size roll threshold.";<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  String WRITTEN_BYTES = "writtenBytes";<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  String WRITTEN_BYTES_DESC = "Size (in bytes) of the data written to the WAL.";<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>   * Add the append size.<a name="line.80"></a>
-<span class="sourceLineNo">081</span>   */<a name="line.81"></a>
-<span class="sourceLineNo">082</span>  void incrementAppendSize(long size);<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Add the time it took to append.<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  void incrementAppendTime(long time);<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>   * Increment the count of wal appends<a name="line.90"></a>
-<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
-<span class="sourceLineNo">092</span>  void incrementAppendCount();<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>   * Increment the number of appends that were slow<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   */<a name="line.96"></a>
-<span class="sourceLineNo">097</span>  void incrementSlowAppendCount();<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>   * Add the time it took to sync the wal.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
-<span class="sourceLineNo">102</span>  void incrementSyncTime(long time);<a name="line.102"></a>
-<span class="sourceLineNo">103</span><a name="line.103"></a>
-<span class="sourceLineNo">104</span>  void incrementLogRollRequested();<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  void incrementErrorLogRoll();<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>  void incrementLowReplicationLogRoll();<a name="line.108"></a>
-<span class="sourceLineNo">109</span><a name="line.109"></a>
-<span class="sourceLineNo">110</span>  long getSlowAppendCount();<a name="line.110"></a>
-<span class="sourceLineNo">111</span><a name="line.111"></a>
-<span class="sourceLineNo">112</span>  void incrementSlowSyncLogRoll();<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  void incrementSizeLogRoll();<a name="line.114"></a>
-<span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  void incrementWrittenBytes(long val);<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  long getWrittenBytes();<a name="line.118"></a>
-<span class="sourceLineNo">119</span>}<a name="line.119"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  String APPEND_TIME = "appendTime";<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  String APPEND_TIME_DESC = "Time an append to the log took.";<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  String APPEND_COUNT = "appendCount";<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  String APPEND_COUNT_DESC = "Number of appends to the write ahead log.";<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  String APPEND_SIZE = "appendSize";<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  String APPEND_SIZE_DESC = "Size (in bytes) of the data appended to the WAL.";<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  String SLOW_APPEND_COUNT = "slowAppendCount";<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  String SLOW_APPEND_COUNT_DESC = "Number of appends that were slow.";<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  String SYNC_TIME = "syncTime";<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  String SYNC_TIME_DESC = "The time it took to sync the WAL to HDFS.";<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  String ROLL_REQUESTED = "rollRequest";<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  String ROLL_REQUESTED_DESC = "How many times a roll has been requested total";<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  String ERROR_ROLL_REQUESTED = "errorRollRequest";<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  String ERROR_ROLL_REQUESTED_DESC =<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      "How many times a roll was requested due to I/O or other errors.";<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  String LOW_REPLICA_ROLL_REQUESTED = "lowReplicaRollRequest";<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  String LOW_REPLICA_ROLL_REQUESTED_DESC =<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      "How many times a roll was requested due to too few datanodes in the write pipeline.";<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  String SLOW_SYNC_ROLL_REQUESTED = "slowSyncRollRequest";<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  String SLOW_SYNC_ROLL_REQUESTED_DESC =<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      "How many times a roll was requested due to sync too slow on the write pipeline.";<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  String SIZE_ROLL_REQUESTED = "sizeRollRequest";<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  String SIZE_ROLL_REQUESTED_DESC =<a name="line.75"></a>
+<span class="sourceLineNo">076</span>      "How many times a roll was requested due to file size roll threshold.";<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  String WRITTEN_BYTES = "writtenBytes";<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  String WRITTEN_BYTES_DESC = "Size (in bytes) of the data written to the WAL.";<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>   * Add the append size.<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  void incrementAppendSize(TableName tableName, long size);<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>   * Add the time it took to append.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   */<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  void incrementAppendTime(long time);<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>   * Increment the count of wal appends<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   */<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  void incrementAppendCount(TableName tableName);<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * Increment the number of appends that were slow<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  void incrementSlowAppendCount();<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>   * Add the time it took to sync the wal.<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   */<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  void incrementSyncTime(long time);<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  void incrementLogRollRequested();<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  void incrementErrorLogRoll();<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  void incrementLowReplicationLogRoll();<a name="line.109"></a>
+<span class="sourceLineNo">110</span><a name="line.110"></a>
+<span class="sourceLineNo">111</span>  long getSlowAppendCount();<a name="line.111"></a>
+<span class="sourceLineNo">112</span><a name="line.112"></a>
+<span class="sourceLineNo">113</span>  void incrementSlowSyncLogRoll();<a name="line.113"></a>
+<span class="sourceLineNo">114</span><a name="line.114"></a>
+<span class="sourceLineNo">115</span>  void incrementSizeLogRoll();<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  void incrementWrittenBytes(long val);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>}<a name="line.118"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html
index 06d8d7e..8dd1dec 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/MetricsWALSourceImpl.html
@@ -26,128 +26,148 @@
 <span class="sourceLineNo">018</span><a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.regionserver.wal;<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.metrics.BaseSourceImpl;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.metrics2.MetricHistogram;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.metrics2.lib.MutableFastCounter;<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><a name="line.25"></a>
-<span class="sourceLineNo">026</span>/**<a name="line.26"></a>
-<span class="sourceLineNo">027</span> * Class that transitions metrics from MetricsWAL into the metrics subsystem.<a name="line.27"></a>
-<span class="sourceLineNo">028</span> *<a name="line.28"></a>
-<span class="sourceLineNo">029</span> * Implements BaseSource through BaseSourceImpl, following the pattern.<a name="line.29"></a>
-<span class="sourceLineNo">030</span> * @see org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource<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 class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSource {<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>  private final MetricHistogram appendSizeHisto;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>  private final MetricHistogram appendTimeHisto;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  private final MetricHistogram syncTimeHisto;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  private final MutableFastCounter appendCount;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  private final MutableFastCounter slowAppendCount;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  private final MutableFastCounter logRollRequested;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  private final MutableFastCounter errorRollRequested;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  private final MutableFastCounter lowReplicationRollRequested;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private final MutableFastCounter slowSyncRollRequested;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private final MutableFastCounter sizeRollRequested;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private final MutableFastCounter writtenBytes;<a name="line.45"></a>
-<span class="sourceLineNo">046</span><a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public MetricsWALSourceImpl() {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>    this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT);<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  }<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  public MetricsWALSourceImpl(String metricsName,<a name="line.51"></a>
-<span class="sourceLineNo">052</span>                              String metricsDescription,<a name="line.52"></a>
-<span class="sourceLineNo">053</span>                              String metricsContext,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>                              String metricsJmxContext) {<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    super(metricsName, metricsDescription, metricsContext, metricsJmxContext);<a name="line.55"></a>
+<span class="sourceLineNo">021</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.concurrent.ConcurrentMap;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.TableName;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.metrics.BaseSourceImpl;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.metrics2.MetricHistogram;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.metrics2.lib.MutableFastCounter;<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><a name="line.28"></a>
+<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
+<span class="sourceLineNo">030</span> * Class that transitions metrics from MetricsWAL into the metrics subsystem.<a name="line.30"></a>
+<span class="sourceLineNo">031</span> *<a name="line.31"></a>
+<span class="sourceLineNo">032</span> * Implements BaseSource through BaseSourceImpl, following the pattern.<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * @see org.apache.hadoop.hbase.regionserver.wal.MetricsWALSource<a name="line.33"></a>
+<span class="sourceLineNo">034</span> */<a name="line.34"></a>
+<span class="sourceLineNo">035</span>@InterfaceAudience.Private<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public class MetricsWALSourceImpl extends BaseSourceImpl implements MetricsWALSource {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  private final MetricHistogram appendSizeHisto;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  private final MetricHistogram appendTimeHisto;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>  private final MetricHistogram syncTimeHisto;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private final MutableFastCounter appendCount;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  private final MutableFastCounter slowAppendCount;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  private final MutableFastCounter logRollRequested;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  private final MutableFastCounter errorRollRequested;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private final MutableFastCounter lowReplicationRollRequested;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  private final MutableFastCounter slowSyncRollRequested;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private final MutableFastCounter sizeRollRequested;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private final MutableFastCounter writtenBytes;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  // Per table metrics.<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private final ConcurrentMap&lt;TableName, MutableFastCounter&gt; perTableAppendCount;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private final ConcurrentMap&lt;TableName, MutableFastCounter&gt; perTableAppendSize;<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public MetricsWALSourceImpl() {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    this(METRICS_NAME, METRICS_DESCRIPTION, METRICS_CONTEXT, METRICS_JMX_CONTEXT);<a name="line.54"></a>
+<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
 <span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>    //Create and store the metrics that will be used.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    appendTimeHisto = this.getMetricsRegistry().newTimeHistogram(APPEND_TIME, APPEND_TIME_DESC);<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    appendSizeHisto = this.getMetricsRegistry().newSizeHistogram(APPEND_SIZE, APPEND_SIZE_DESC);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    appendCount = this.getMetricsRegistry().newCounter(APPEND_COUNT, APPEND_COUNT_DESC, 0L);<a name="line.60"></a>
-<span class="sourceLineNo">061</span>    slowAppendCount =<a name="line.61"></a>
-<span class="sourceLineNo">062</span>        this.getMetricsRegistry().newCounter(SLOW_APPEND_COUNT, SLOW_APPEND_COUNT_DESC, 0L);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    syncTimeHisto = this.getMetricsRegistry().newTimeHistogram(SYNC_TIME, SYNC_TIME_DESC);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    logRollRequested =<a name="line.64"></a>
-<span class="sourceLineNo">065</span>        this.getMetricsRegistry().newCounter(ROLL_REQUESTED, ROLL_REQUESTED_DESC, 0L);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    errorRollRequested = this.getMetricsRegistry()<a name="line.66"></a>
-<span class="sourceLineNo">067</span>        .newCounter(ERROR_ROLL_REQUESTED, ERROR_ROLL_REQUESTED_DESC, 0L);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    lowReplicationRollRequested = this.getMetricsRegistry()<a name="line.68"></a>
-<span class="sourceLineNo">069</span>        .newCounter(LOW_REPLICA_ROLL_REQUESTED, LOW_REPLICA_ROLL_REQUESTED_DESC, 0L);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    slowSyncRollRequested = this.getMetricsRegistry()<a name="line.70"></a>
-<span class="sourceLineNo">071</span>        .newCounter(SLOW_SYNC_ROLL_REQUESTED, SLOW_SYNC_ROLL_REQUESTED_DESC, 0L);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    sizeRollRequested = this.getMetricsRegistry()<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        .newCounter(SIZE_ROLL_REQUESTED, SIZE_ROLL_REQUESTED_DESC, 0L);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    writtenBytes = this.getMetricsRegistry().newCounter(WRITTEN_BYTES, WRITTEN_BYTES_DESC, 0L);<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @Override<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public void incrementAppendSize(long size) {<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    appendSizeHisto.add(size);<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 incrementAppendTime(long time) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    appendTimeHisto.add(time);<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 incrementAppendCount() {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    appendCount.incr();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @Override<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public void incrementSlowAppendCount() {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    slowAppendCount.incr();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  public void incrementSyncTime(long time) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    syncTimeHisto.add(time);<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>  public void incrementLogRollRequested() {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    logRollRequested.incr();<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>  public void incrementErrorLogRoll() {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    errorRollRequested.incr();<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>  @Override<a name="line.112"></a>
-<span class="sourceLineNo">113</span>  public void incrementLowReplicationLogRoll() {<a name="line.113"></a>
-<span class="sourceLineNo">114</span>    lowReplicationRollRequested.incr();<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>  @Override<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void incrementSlowSyncLogRoll() {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    slowSyncRollRequested.incr();<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>  @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  public void incrementSizeLogRoll() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    sizeRollRequested.incr();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  }<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  @Override<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  public long getSlowAppendCount() {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    return slowAppendCount.value();<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>  @Override<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  public void incrementWrittenBytes(long val) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    writtenBytes.incr(val);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  }<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>  @Override<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  public long getWrittenBytes() {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    return writtenBytes.value();<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  }<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>}<a name="line.142"></a>
+<span class="sourceLineNo">057</span>  public MetricsWALSourceImpl(String metricsName,<a name="line.57"></a>
+<span class="sourceLineNo">058</span>                              String metricsDescription,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>                              String metricsContext,<a name="line.59"></a>
+<span class="sourceLineNo">060</span>                              String metricsJmxContext) {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    super(metricsName, metricsDescription, metricsContext, metricsJmxContext);<a name="line.61"></a>
+<span class="sourceLineNo">062</span><a name="line.62"></a>
+<span class="sourceLineNo">063</span>    //Create and store the metrics that will be used.<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    appendTimeHisto = this.getMetricsRegistry().newTimeHistogram(APPEND_TIME, APPEND_TIME_DESC);<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    appendSizeHisto = this.getMetricsRegistry().newSizeHistogram(APPEND_SIZE, APPEND_SIZE_DESC);<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    appendCount = this.getMetricsRegistry().newCounter(APPEND_COUNT, APPEND_COUNT_DESC, 0L);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    slowAppendCount =<a name="line.67"></a>
+<span class="sourceLineNo">068</span>        this.getMetricsRegistry().newCounter(SLOW_APPEND_COUNT, SLOW_APPEND_COUNT_DESC, 0L);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    syncTimeHisto = this.getMetricsRegistry().newTimeHistogram(SYNC_TIME, SYNC_TIME_DESC);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    logRollRequested =<a name="line.70"></a>
+<span class="sourceLineNo">071</span>        this.getMetricsRegistry().newCounter(ROLL_REQUESTED, ROLL_REQUESTED_DESC, 0L);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    errorRollRequested = this.getMetricsRegistry()<a name="line.72"></a>
+<span class="sourceLineNo">073</span>        .newCounter(ERROR_ROLL_REQUESTED, ERROR_ROLL_REQUESTED_DESC, 0L);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    lowReplicationRollRequested = this.getMetricsRegistry()<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        .newCounter(LOW_REPLICA_ROLL_REQUESTED, LOW_REPLICA_ROLL_REQUESTED_DESC, 0L);<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    slowSyncRollRequested = this.getMetricsRegistry()<a name="line.76"></a>
+<span class="sourceLineNo">077</span>        .newCounter(SLOW_SYNC_ROLL_REQUESTED, SLOW_SYNC_ROLL_REQUESTED_DESC, 0L);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    sizeRollRequested = this.getMetricsRegistry()<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        .newCounter(SIZE_ROLL_REQUESTED, SIZE_ROLL_REQUESTED_DESC, 0L);<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    writtenBytes = this.getMetricsRegistry().newCounter(WRITTEN_BYTES, WRITTEN_BYTES_DESC, 0L);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    perTableAppendCount = new ConcurrentHashMap&lt;&gt;();<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    perTableAppendSize = new ConcurrentHashMap&lt;&gt;();<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  @Override<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  public void incrementAppendSize(TableName tableName, long size) {<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    appendSizeHisto.add(size);<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    MutableFastCounter tableAppendSizeCounter = perTableAppendSize.get(tableName);<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    if (tableAppendSizeCounter == null) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      // Ideally putIfAbsent is atomic and we don't need a branch check but we still do it to avoid<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      // expensive string construction for every append.<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      String metricsKey = String.format("%s.%s", tableName, APPEND_SIZE);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      perTableAppendSize.putIfAbsent(<a name="line.93"></a>
+<span class="sourceLineNo">094</span>          tableName, getMetricsRegistry().newCounter(metricsKey, APPEND_SIZE_DESC, 0L));<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      tableAppendSizeCounter = perTableAppendSize.get(tableName);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    tableAppendSizeCounter.incr(size);<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>  @Override<a name="line.100"></a>
+<span class="sourceLineNo">101</span>  public void incrementAppendTime(long time) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    appendTimeHisto.add(time);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  }<a name="line.103"></a>
+<span class="sourceLineNo">104</span><a name="line.104"></a>
+<span class="sourceLineNo">105</span>  @Override<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  public void incrementAppendCount(TableName tableName) {<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    appendCount.incr();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    MutableFastCounter tableAppendCounter = perTableAppendCount.get(tableName);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>    if (tableAppendCounter == null) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      String metricsKey = String.format("%s.%s", tableName, APPEND_COUNT);<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      perTableAppendCount.putIfAbsent(<a name="line.111"></a>
+<span class="sourceLineNo">112</span>          tableName, getMetricsRegistry().newCounter(metricsKey, APPEND_COUNT_DESC, 0L));<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      tableAppendCounter = perTableAppendCount.get(tableName);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>    tableAppendCounter.incr();<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>  @Override<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  public void incrementSlowAppendCount() {<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    slowAppendCount.incr();<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>  @Override<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  public void incrementSyncTime(long time) {<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    syncTimeHisto.add(time);<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 incrementLogRollRequested() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    logRollRequested.incr();<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 void incrementErrorLogRoll() {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    errorRollRequested.incr();<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 void incrementLowReplicationLogRoll() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    lowReplicationRollRequested.incr();<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>  @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public void incrementSlowSyncLogRoll() {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    slowSyncRollRequested.incr();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>  }<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>  @Override<a name="line.148"></a>
+<span class="sourceLineNo">149</span>  public void incrementSizeLogRoll() {<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    sizeRollRequested.incr();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public long getSlowAppendCount() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    return slowAppendCount.value();<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  }<a name="line.156"></a>
+<span class="sourceLineNo">157</span><a name="line.157"></a>
+<span class="sourceLineNo">158</span>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public void incrementWrittenBytes(long val) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    writtenBytes.incr(val);<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>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html
new file mode 100644
index 0000000..eeecd15
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.ReplicationStatisticsChore.html
@@ -0,0 +1,187 @@
+<!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.replication;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.Collections;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FileSystem;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.Path;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.Server;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.regionserver.ReplicationSinkService;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationSink;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>@InterfaceAudience.Private<a name="line.41"></a>
+<span class="sourceLineNo">042</span>public class ReplicationSinkServiceImpl implements ReplicationSinkService {<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSinkServiceImpl.class);<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private Configuration conf;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private Server server;<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private ReplicationSink replicationSink;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  // ReplicationLoad to access replication metrics<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ReplicationLoad replicationLoad;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private int statsPeriod;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  @Override<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public void replicateLogEntries(List&lt;AdminProtos.WALEntry&gt; entries, CellScanner cells,<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    String replicationClusterId, String sourceBaseNamespaceDirPath,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    String sourceHFileArchiveDirPath) throws IOException {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    this.replicationSink.replicateEntries(entries, cells, replicationClusterId,<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      sourceBaseNamespaceDirPath, sourceHFileArchiveDirPath);<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>  @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public void initialize(Server server, FileSystem fs, Path logdir, Path oldLogDir,<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    WALProvider walProvider) throws IOException {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    this.server = server;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.conf = server.getConfiguration();<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    this.statsPeriod =<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      this.conf.getInt("replication.stats.thread.period.seconds", 5 * 60);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.replicationLoad = new ReplicationLoad();<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>  @Override<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public void startReplicationService() throws IOException {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    this.replicationSink = new ReplicationSink(this.conf);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.server.getChoreService().scheduleChore(<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      new ReplicationStatisticsChore("ReplicationSinkStatistics", server, statsPeriod));<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 stopReplicationService() {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    if (this.replicationSink != null) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      this.replicationSink.stopReplicationSinkServices();<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><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  public ReplicationLoad refreshAndGetReplicationLoad() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    if (replicationLoad == null) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      return null;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    // always build for latest data<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    replicationLoad.buildReplicationLoad(Collections.emptyList(), replicationSink.getSinkMetrics());<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    return replicationLoad;<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>  private final class ReplicationStatisticsChore extends ScheduledChore {<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationStatisticsChore(String name, Stoppable stopper, int period) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      super(name, stopper, period);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>    @Override<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    protected void chore() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      printStats(replicationSink.getStats());<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>    private void printStats(String stats) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      if (!stats.isEmpty()) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        LOG.info(stats);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>}<a name="line.115"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html
new file mode 100644
index 0000000..eeecd15
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.html
@@ -0,0 +1,187 @@
+<!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.replication;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.Collections;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
+<span class="sourceLineNo">023</span><a name="line.23"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.conf.Configuration;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.fs.FileSystem;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.Path;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.Server;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.regionserver.ReplicationSinkService;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.regionserver.ReplicationSink;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
+<span class="sourceLineNo">038</span><a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>@InterfaceAudience.Private<a name="line.41"></a>
+<span class="sourceLineNo">042</span>public class ReplicationSinkServiceImpl implements ReplicationSinkService {<a name="line.42"></a>
+<span class="sourceLineNo">043</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSinkServiceImpl.class);<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private Configuration conf;<a name="line.45"></a>
+<span class="sourceLineNo">046</span><a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private Server server;<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private ReplicationSink replicationSink;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>  // ReplicationLoad to access replication metrics<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private ReplicationLoad replicationLoad;<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private int statsPeriod;<a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  @Override<a name="line.56"></a>
+<span class="sourceLineNo">057</span>  public void replicateLogEntries(List&lt;AdminProtos.WALEntry&gt; entries, CellScanner cells,<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    String replicationClusterId, String sourceBaseNamespaceDirPath,<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    String sourceHFileArchiveDirPath) throws IOException {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    this.replicationSink.replicateEntries(entries, cells, replicationClusterId,<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      sourceBaseNamespaceDirPath, sourceHFileArchiveDirPath);<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>  @Override<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public void initialize(Server server, FileSystem fs, Path logdir, Path oldLogDir,<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    WALProvider walProvider) throws IOException {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    this.server = server;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    this.conf = server.getConfiguration();<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    this.statsPeriod =<a name="line.69"></a>
+<span class="sourceLineNo">070</span>      this.conf.getInt("replication.stats.thread.period.seconds", 5 * 60);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    this.replicationLoad = new ReplicationLoad();<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>  @Override<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  public void startReplicationService() throws IOException {<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    this.replicationSink = new ReplicationSink(this.conf);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    this.server.getChoreService().scheduleChore(<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      new ReplicationStatisticsChore("ReplicationSinkStatistics", server, statsPeriod));<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 stopReplicationService() {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    if (this.replicationSink != null) {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      this.replicationSink.stopReplicationSinkServices();<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><a name="line.87"></a>
+<span class="sourceLineNo">088</span>  @Override<a name="line.88"></a>
+<span class="sourceLineNo">089</span>  public ReplicationLoad refreshAndGetReplicationLoad() {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    if (replicationLoad == null) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>      return null;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    // always build for latest data<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    replicationLoad.buildReplicationLoad(Collections.emptyList(), replicationSink.getSinkMetrics());<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    return replicationLoad;<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>  private final class ReplicationStatisticsChore extends ScheduledChore {<a name="line.98"></a>
+<span class="sourceLineNo">099</span><a name="line.99"></a>
+<span class="sourceLineNo">100</span>    ReplicationStatisticsChore(String name, Stoppable stopper, int period) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      super(name, stopper, period);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    }<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>    @Override<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    protected void chore() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      printStats(replicationSink.getStats());<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>    private void printStats(String stats) {<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      if (!stats.isEmpty()) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        LOG.info(stats);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    }<a name="line.113"></a>
+<span class="sourceLineNo">114</span>  }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>}<a name="line.115"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html
new file mode 100644
index 0000000..9734a63
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsChore.html
@@ -0,0 +1,309 @@
+<!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.replication.regionserver;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.OptionalLong;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.UUID;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.FileSystem;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.Path;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HConstants;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Server;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.regionserver.ReplicationSourceService;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.wal.SyncReplicationWALProvider;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.zookeeper.KeeperException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.slf4j.Logger;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.slf4j.LoggerFactory;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Gateway to Replication. Used by {@link org.apache.hadoop.hbase.regionserver.HRegionServer}.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> */<a name="line.53"></a>
+<span class="sourceLineNo">054</span>@InterfaceAudience.Private<a name="line.54"></a>
+<span class="sourceLineNo">055</span>public class Replication implements ReplicationSourceService {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private static final Logger LOG =<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      LoggerFactory.getLogger(Replication.class);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private boolean isReplicationForBulkLoadDataEnabled;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private ReplicationSourceManager replicationManager;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private ReplicationQueueStorage queueStorage;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private ReplicationPeers replicationPeers;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private ReplicationTracker replicationTracker;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private Configuration conf;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private SyncReplicationPeerInfoProvider syncReplicationPeerInfoProvider;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  // Hosting server<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private Server server;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private int statsPeriod;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  // ReplicationLoad to access replication metrics<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private ReplicationLoad replicationLoad;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private MetricsReplicationGlobalSourceSource globalMetricsSource;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private PeerProcedureHandler peerProcedureHandler;<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>   * Empty constructor<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  public Replication() {<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>  @Override<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public void initialize(Server server, FileSystem fs, Path logDir, Path oldLogDir,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      WALProvider walProvider) throws IOException {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.server = server;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    this.conf = this.server.getConfiguration();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    this.isReplicationForBulkLoadDataEnabled =<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      ReplicationUtils.isReplicationForBulkLoadDataEnabled(this.conf);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    if (this.isReplicationForBulkLoadDataEnabled) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      if (conf.get(HConstants.REPLICATION_CLUSTER_ID) == null<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          || conf.get(HConstants.REPLICATION_CLUSTER_ID).isEmpty()) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        throw new IllegalArgumentException(HConstants.REPLICATION_CLUSTER_ID<a name="line.90"></a>
+<span class="sourceLineNo">091</span>            + " cannot be null/empty when " + HConstants.REPLICATION_BULKLOAD_ENABLE_KEY<a name="line.91"></a>
+<span class="sourceLineNo">092</span>            + " is set to true.");<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><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    try {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      this.queueStorage =<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          ReplicationStorageFactory.getReplicationQueueStorage(server.getZooKeeper(), conf);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      this.replicationPeers =<a name="line.99"></a>
+<span class="sourceLineNo">100</span>          ReplicationFactory.getReplicationPeers(server.getZooKeeper(), this.conf);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      this.replicationPeers.init();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      this.replicationTracker =<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          ReplicationFactory.getReplicationTracker(server.getZooKeeper(), this.server, this.server);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    } catch (Exception e) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      throw new IOException("Failed replication handler create", e);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    UUID clusterId = null;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    try {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      clusterId = ZKClusterId.getUUIDForCluster(this.server.getZooKeeper());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    } catch (KeeperException ke) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      throw new IOException("Could not read cluster id", ke);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    SyncReplicationPeerMappingManager mapping = new SyncReplicationPeerMappingManager();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.globalMetricsSource = CompatibilitySingletonFactory<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        .getInstance(MetricsReplicationSourceFactory.class).getGlobalSource();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    this.replicationManager = new ReplicationSourceManager(queueStorage, replicationPeers,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        replicationTracker, conf, this.server, fs, logDir, oldLogDir, clusterId,<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        walProvider != null ? walProvider.getWALFileLengthProvider() : p -&gt; OptionalLong.empty(),<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        mapping, globalMetricsSource);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    this.syncReplicationPeerInfoProvider =<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        new SyncReplicationPeerInfoProviderImpl(replicationPeers, mapping);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    PeerActionListener peerActionListener = PeerActionListener.DUMMY;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    if (walProvider != null) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      walProvider<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        .addWALActionsListener(new ReplicationSourceWALActionListener(conf, replicationManager));<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      if (walProvider instanceof SyncReplicationWALProvider) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        SyncReplicationWALProvider syncWALProvider = (SyncReplicationWALProvider) walProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        peerActionListener = syncWALProvider;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        syncWALProvider.setPeerInfoProvider(syncReplicationPeerInfoProvider);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        // for sync replication state change, we need to reload the state twice, you can see the<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        // code in PeerProcedureHandlerImpl, so here we need to go over the sync replication peers<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        // to see if any of them are in the middle of the two refreshes, if so, we need to manually<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        // repeat the action we have done in the first refresh, otherwise when the second refresh<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        // comes we will be in trouble, such as NPE.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        replicationPeers.getAllPeerIds().stream().map(replicationPeers::getPeer)<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            .filter(p -&gt; p.getPeerConfig().isSyncReplication())<a name="line.136"></a>
+<span class="sourceLineNo">137</span>            .filter(p -&gt; p.getNewSyncReplicationState() != SyncReplicationState.NONE)<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .forEach(p -&gt; syncWALProvider.peerSyncReplicationStateChange(p.getId(),<a name="line.138"></a>
+<span class="sourceLineNo">139</span>              p.getSyncReplicationState(), p.getNewSyncReplicationState(), 0));<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    this.statsPeriod =<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        this.conf.getInt("replication.stats.thread.period.seconds", 5 * 60);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    this.replicationLoad = new ReplicationLoad();<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    this.peerProcedureHandler =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      new PeerProcedureHandlerImpl(replicationManager, peerActionListener);<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 PeerProcedureHandler getPeerProcedureHandler() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    return peerProcedureHandler;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Stops replication service.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public void stopReplicationService() {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    this.replicationManager.join();<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>   * If replication is enabled and this cluster is a master,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * it starts<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @throws IOException<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  @Override<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public void startReplicationService() throws IOException {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    this.replicationManager.init();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    this.server.getChoreService().scheduleChore(<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      new ReplicationStatisticsChore("ReplicationSourceStatistics", server, statsPeriod));<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    LOG.info("{} started", this.server.toString());<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>  /**<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * Get the replication sources manager<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @return the manager if replication is enabled, else returns false<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  public ReplicationSourceManager getReplicationManager() {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return this.replicationManager;<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>  void addHFileRefsToQueue(TableName tableName, byte[] family, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      this.replicationManager.addHFileRefs(tableName, family, pairs);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    } catch (IOException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      LOG.error("Failed to add hfile references in the replication queue.", e);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      throw e;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * Statistics task. Periodically prints the cache statistics to the log.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private final class ReplicationStatisticsChore extends ScheduledChore {<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    ReplicationStatisticsChore(String name, Stoppable stopper, int period) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      super(name, stopper, period);<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>    @Override<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    protected void chore() {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      printStats(replicationManager.getStats());<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private void printStats(String stats) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      if (!stats.isEmpty()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info(stats);<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>  }<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 ReplicationLoad refreshAndGetReplicationLoad() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    if (this.replicationLoad == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return null;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // always build for latest data<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    allSources.addAll(this.replicationManager.getSources());<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    allSources.addAll(this.replicationManager.getOldSources());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    this.replicationLoad.buildReplicationLoad(allSources, null);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return this.replicationLoad;<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 SyncReplicationPeerInfoProvider getSyncReplicationPeerInfoProvider() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    return syncReplicationPeerInfoProvider;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  @Override<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public ReplicationPeers getReplicationPeers() {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    return replicationPeers;<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html
deleted file mode 100644
index aa1f9a4..0000000
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.ReplicationStatisticsTask.html
+++ /dev/null
@@ -1,371 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html lang="en">
-<head>
-<title>Source code</title>
-<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
-</head>
-<body>
-<div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
-<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
-<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
-<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
-<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
-<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
-<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
-<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
-<span class="sourceLineNo">009</span> *<a name="line.9"></a>
-<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
-<span class="sourceLineNo">011</span> *<a name="line.11"></a>
-<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing, software<a name="line.12"></a>
-<span class="sourceLineNo">013</span> * distributed under the License is distributed on an "AS IS" BASIS,<a name="line.13"></a>
-<span class="sourceLineNo">014</span> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<a name="line.14"></a>
-<span class="sourceLineNo">015</span> * See the License for the specific language governing permissions and<a name="line.15"></a>
-<span class="sourceLineNo">016</span> * limitations under the License.<a name="line.16"></a>
-<span class="sourceLineNo">017</span> */<a name="line.17"></a>
-<span class="sourceLineNo">018</span>package org.apache.hadoop.hbase.replication.regionserver;<a name="line.18"></a>
-<span class="sourceLineNo">019</span><a name="line.19"></a>
-<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.util.ArrayList;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.OptionalLong;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import java.util.UUID;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.concurrent.Executors;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.concurrent.TimeUnit;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.FileSystem;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.Path;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HConstants;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Server;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.TableName;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.ReplicationSinkService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.regionserver.ReplicationSourceService;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.wal.SyncReplicationWALProvider;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.zookeeper.KeeperException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.slf4j.Logger;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.slf4j.LoggerFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<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> * Gateway to Replication. Used by {@link org.apache.hadoop.hbase.regionserver.HRegionServer}.<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 Replication implements ReplicationSourceService, ReplicationSinkService {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private static final Logger LOG =<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      LoggerFactory.getLogger(Replication.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private boolean isReplicationForBulkLoadDataEnabled;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private ReplicationSourceManager replicationManager;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private ReplicationQueueStorage queueStorage;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private ReplicationPeers replicationPeers;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private ReplicationTracker replicationTracker;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private Configuration conf;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private ReplicationSink replicationSink;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private SyncReplicationPeerInfoProvider syncReplicationPeerInfoProvider;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // Hosting server<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private Server server;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  /** Statistics thread schedule pool */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private ScheduledExecutorService scheduleThreadPool;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private int statsThreadPeriod;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  // ReplicationLoad to access replication metrics<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private ReplicationLoad replicationLoad;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private MetricsReplicationGlobalSourceSource globalMetricsSource;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private PeerProcedureHandler peerProcedureHandler;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Empty constructor<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public Replication() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  @Override<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public void initialize(Server server, FileSystem fs, Path logDir, Path oldLogDir,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      WALProvider walProvider) throws IOException {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    this.server = server;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    this.conf = this.server.getConfiguration();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    this.isReplicationForBulkLoadDataEnabled =<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      ReplicationUtils.isReplicationForBulkLoadDataEnabled(this.conf);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this.scheduleThreadPool = Executors.newScheduledThreadPool(1,<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      new ThreadFactoryBuilder()<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        .setNameFormat(server.getServerName().toShortString() + "Replication Statistics #%d")<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        .setDaemon(true)<a name="line.100"></a>
-<span class="sourceLineNo">101</span>        .build());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (this.isReplicationForBulkLoadDataEnabled) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      if (conf.get(HConstants.REPLICATION_CLUSTER_ID) == null<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          || conf.get(HConstants.REPLICATION_CLUSTER_ID).isEmpty()) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        throw new IllegalArgumentException(HConstants.REPLICATION_CLUSTER_ID<a name="line.105"></a>
-<span class="sourceLineNo">106</span>            + " cannot be null/empty when " + HConstants.REPLICATION_BULKLOAD_ENABLE_KEY<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            + " is set to true.");<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>    try {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      this.queueStorage =<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          ReplicationStorageFactory.getReplicationQueueStorage(server.getZooKeeper(), conf);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      this.replicationPeers =<a name="line.114"></a>
-<span class="sourceLineNo">115</span>          ReplicationFactory.getReplicationPeers(server.getZooKeeper(), this.conf);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      this.replicationPeers.init();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      this.replicationTracker =<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          ReplicationFactory.getReplicationTracker(server.getZooKeeper(), this.server, this.server);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    } catch (Exception e) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      throw new IOException("Failed replication handler create", e);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    UUID clusterId = null;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      clusterId = ZKClusterId.getUUIDForCluster(this.server.getZooKeeper());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    } catch (KeeperException ke) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      throw new IOException("Could not read cluster id", ke);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    SyncReplicationPeerMappingManager mapping = new SyncReplicationPeerMappingManager();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    this.globalMetricsSource = CompatibilitySingletonFactory<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        .getInstance(MetricsReplicationSourceFactory.class).getGlobalSource();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.replicationManager = new ReplicationSourceManager(queueStorage, replicationPeers,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        replicationTracker, conf, this.server, fs, logDir, oldLogDir, clusterId,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        walProvider != null ? walProvider.getWALFileLengthProvider() : p -&gt; OptionalLong.empty(),<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        mapping, globalMetricsSource);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    this.syncReplicationPeerInfoProvider =<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        new SyncReplicationPeerInfoProviderImpl(replicationPeers, mapping);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    PeerActionListener peerActionListener = PeerActionListener.DUMMY;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    if (walProvider != null) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      walProvider<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        .addWALActionsListener(new ReplicationSourceWALActionListener(conf, replicationManager));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      if (walProvider instanceof SyncReplicationWALProvider) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        SyncReplicationWALProvider syncWALProvider = (SyncReplicationWALProvider) walProvider;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        peerActionListener = syncWALProvider;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        syncWALProvider.setPeerInfoProvider(syncReplicationPeerInfoProvider);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        // for sync replication state change, we need to reload the state twice, you can see the<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        // code in PeerProcedureHandlerImpl, so here we need to go over the sync replication peers<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        // to see if any of them are in the middle of the two refreshes, if so, we need to manually<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        // repeat the action we have done in the first refresh, otherwise when the second refresh<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // comes we will be in trouble, such as NPE.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        replicationPeers.getAllPeerIds().stream().map(replicationPeers::getPeer)<a name="line.150"></a>
-<span class="sourceLineNo">151</span>            .filter(p -&gt; p.getPeerConfig().isSyncReplication())<a name="line.151"></a>
-<span class="sourceLineNo">152</span>            .filter(p -&gt; p.getNewSyncReplicationState() != SyncReplicationState.NONE)<a name="line.152"></a>
-<span class="sourceLineNo">153</span>            .forEach(p -&gt; syncWALProvider.peerSyncReplicationStateChange(p.getId(),<a name="line.153"></a>
-<span class="sourceLineNo">154</span>              p.getSyncReplicationState(), p.getNewSyncReplicationState(), 0));<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.statsThreadPeriod =<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        this.conf.getInt("replication.stats.thread.period.seconds", 5 * 60);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    LOG.debug("Replication stats-in-log period={} seconds",  this.statsThreadPeriod);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.replicationLoad = new ReplicationLoad();<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this.peerProcedureHandler =<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      new PeerProcedureHandlerImpl(replicationManager, peerActionListener);<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>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public PeerProcedureHandler getPeerProcedureHandler() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    return peerProcedureHandler;<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>   * Stops replication service.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public void stopReplicationService() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    join();<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>  /**<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Join with the replication threads<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public void join() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    this.replicationManager.join();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (this.replicationSink != null) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      this.replicationSink.stopReplicationSinkServices();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    scheduleThreadPool.shutdown();<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>   * Carry on the list of log entries down to the sink<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param entries list of entries to replicate<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * @param cells The data -- the cells -- that &lt;code&gt;entries&lt;/code&gt; describes (the entries do not<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   *          contain the Cells we are replicating; they are passed here on the side in this<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   *          CellScanner).<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @param replicationClusterId Id which will uniquely identify source cluster FS client<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   *          configurations in the replication configuration directory<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @param sourceBaseNamespaceDirPath Path that point to the source cluster base namespace<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   *          directory required for replicating hfiles<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @param sourceHFileArchiveDirPath Path that point to the source cluster hfile archive directory<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * @throws IOException<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public void replicateLogEntries(List&lt;WALEntry&gt; entries, CellScanner cells,<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      String replicationClusterId, String sourceBaseNamespaceDirPath,<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      String sourceHFileArchiveDirPath) throws IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    this.replicationSink.replicateEntries(entries, cells, replicationClusterId,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      sourceBaseNamespaceDirPath, sourceHFileArchiveDirPath);<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>   * If replication is enabled and this cluster is a master,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * it starts<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @throws IOException<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 void startReplicationService() throws IOException {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    this.replicationManager.init();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    this.replicationSink = new ReplicationSink(this.conf);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    this.scheduleThreadPool.scheduleAtFixedRate(<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      new ReplicationStatisticsTask(this.replicationSink, this.replicationManager),<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      statsThreadPeriod, statsThreadPeriod, TimeUnit.SECONDS);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    LOG.info("{} started", this.server.toString());<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>  /**<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * Get the replication sources manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return the manager if replication is enabled, else returns false<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public ReplicationSourceManager getReplicationManager() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return this.replicationManager;<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>  void addHFileRefsToQueue(TableName tableName, byte[] family, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      throws IOException {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    try {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      this.replicationManager.addHFileRefs(tableName, family, pairs);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    } catch (IOException e) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      LOG.error("Failed to add hfile references in the replication queue.", e);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      throw e;<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>   * Statistics task. Periodically prints the cache statistics to the log.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  private final static class ReplicationStatisticsTask implements Runnable {<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    private final ReplicationSink replicationSink;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    private final ReplicationSourceManager replicationManager;<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    public ReplicationStatisticsTask(ReplicationSink replicationSink,<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        ReplicationSourceManager replicationManager) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      this.replicationManager = replicationManager;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      this.replicationSink = replicationSink;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public void run() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      printStats(this.replicationManager.getStats());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      printStats(this.replicationSink.getStats());<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>    private void printStats(String stats) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      if (!stats.isEmpty()) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        LOG.info(stats);<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><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  @Override<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public ReplicationLoad refreshAndGetReplicationLoad() {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (this.replicationLoad == null) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    // always build for latest data<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    buildReplicationLoad();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return this.replicationLoad;<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>  private void buildReplicationLoad() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    allSources.addAll(this.replicationManager.getSources());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    allSources.addAll(this.replicationManager.getOldSources());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // get sink<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    MetricsSink sinkMetrics = this.replicationSink.getSinkMetrics();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    this.replicationLoad.buildReplicationLoad(allSources, sinkMetrics);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>  @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  public SyncReplicationPeerInfoProvider getSyncReplicationPeerInfoProvider() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    return syncReplicationPeerInfoProvider;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public ReplicationPeers getReplicationPeers() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    return replicationPeers;<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>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</pre>
-</div>
-</body>
-</html>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html
index aa1f9a4..9734a63 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/Replication.html
@@ -30,281 +30,219 @@
 <span class="sourceLineNo">022</span>import java.util.List;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import java.util.OptionalLong;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.UUID;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.concurrent.Executors;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.concurrent.TimeUnit;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.FileSystem;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.fs.Path;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.CellScanner;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.HConstants;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.Server;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.TableName;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.regionserver.ReplicationSinkService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.regionserver.ReplicationSourceService;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.wal.SyncReplicationWALProvider;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.zookeeper.KeeperException;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.slf4j.Logger;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.slf4j.LoggerFactory;<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.54"></a>
-<span class="sourceLineNo">055</span><a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.WALEntry;<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> * Gateway to Replication. Used by {@link org.apache.hadoop.hbase.regionserver.HRegionServer}.<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 Replication implements ReplicationSourceService, ReplicationSinkService {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private static final Logger LOG =<a name="line.63"></a>
-<span class="sourceLineNo">064</span>      LoggerFactory.getLogger(Replication.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private boolean isReplicationForBulkLoadDataEnabled;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private ReplicationSourceManager replicationManager;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private ReplicationQueueStorage queueStorage;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private ReplicationPeers replicationPeers;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private ReplicationTracker replicationTracker;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private Configuration conf;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private ReplicationSink replicationSink;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private SyncReplicationPeerInfoProvider syncReplicationPeerInfoProvider;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // Hosting server<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  private Server server;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  /** Statistics thread schedule pool */<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private ScheduledExecutorService scheduleThreadPool;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private int statsThreadPeriod;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  // ReplicationLoad to access replication metrics<a name="line.78"></a>
-<span class="sourceLineNo">079</span>  private ReplicationLoad replicationLoad;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>  private MetricsReplicationGlobalSourceSource globalMetricsSource;<a name="line.80"></a>
-<span class="sourceLineNo">081</span><a name="line.81"></a>
-<span class="sourceLineNo">082</span>  private PeerProcedureHandler peerProcedureHandler;<a name="line.82"></a>
-<span class="sourceLineNo">083</span><a name="line.83"></a>
-<span class="sourceLineNo">084</span>  /**<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * Empty constructor<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   */<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  public Replication() {<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>  @Override<a name="line.90"></a>
-<span class="sourceLineNo">091</span>  public void initialize(Server server, FileSystem fs, Path logDir, Path oldLogDir,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      WALProvider walProvider) throws IOException {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    this.server = server;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    this.conf = this.server.getConfiguration();<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    this.isReplicationForBulkLoadDataEnabled =<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      ReplicationUtils.isReplicationForBulkLoadDataEnabled(this.conf);<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this.scheduleThreadPool = Executors.newScheduledThreadPool(1,<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      new ThreadFactoryBuilder()<a name="line.98"></a>
-<span class="sourceLineNo">099</span>        .setNameFormat(server.getServerName().toShortString() + "Replication Statistics #%d")<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        .setDaemon(true)<a name="line.100"></a>
-<span class="sourceLineNo">101</span>        .build());<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (this.isReplicationForBulkLoadDataEnabled) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      if (conf.get(HConstants.REPLICATION_CLUSTER_ID) == null<a name="line.103"></a>
-<span class="sourceLineNo">104</span>          || conf.get(HConstants.REPLICATION_CLUSTER_ID).isEmpty()) {<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        throw new IllegalArgumentException(HConstants.REPLICATION_CLUSTER_ID<a name="line.105"></a>
-<span class="sourceLineNo">106</span>            + " cannot be null/empty when " + HConstants.REPLICATION_BULKLOAD_ENABLE_KEY<a name="line.106"></a>
-<span class="sourceLineNo">107</span>            + " is set to true.");<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>    try {<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      this.queueStorage =<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          ReplicationStorageFactory.getReplicationQueueStorage(server.getZooKeeper(), conf);<a name="line.113"></a>
-<span class="sourceLineNo">114</span>      this.replicationPeers =<a name="line.114"></a>
-<span class="sourceLineNo">115</span>          ReplicationFactory.getReplicationPeers(server.getZooKeeper(), this.conf);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>      this.replicationPeers.init();<a name="line.116"></a>
-<span class="sourceLineNo">117</span>      this.replicationTracker =<a name="line.117"></a>
-<span class="sourceLineNo">118</span>          ReplicationFactory.getReplicationTracker(server.getZooKeeper(), this.server, this.server);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    } catch (Exception e) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      throw new IOException("Failed replication handler create", e);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    }<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    UUID clusterId = null;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    try {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      clusterId = ZKClusterId.getUUIDForCluster(this.server.getZooKeeper());<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    } catch (KeeperException ke) {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      throw new IOException("Could not read cluster id", ke);<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    }<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    SyncReplicationPeerMappingManager mapping = new SyncReplicationPeerMappingManager();<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    this.globalMetricsSource = CompatibilitySingletonFactory<a name="line.129"></a>
-<span class="sourceLineNo">130</span>        .getInstance(MetricsReplicationSourceFactory.class).getGlobalSource();<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    this.replicationManager = new ReplicationSourceManager(queueStorage, replicationPeers,<a name="line.131"></a>
-<span class="sourceLineNo">132</span>        replicationTracker, conf, this.server, fs, logDir, oldLogDir, clusterId,<a name="line.132"></a>
-<span class="sourceLineNo">133</span>        walProvider != null ? walProvider.getWALFileLengthProvider() : p -&gt; OptionalLong.empty(),<a name="line.133"></a>
-<span class="sourceLineNo">134</span>        mapping, globalMetricsSource);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    this.syncReplicationPeerInfoProvider =<a name="line.135"></a>
-<span class="sourceLineNo">136</span>        new SyncReplicationPeerInfoProviderImpl(replicationPeers, mapping);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    PeerActionListener peerActionListener = PeerActionListener.DUMMY;<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    if (walProvider != null) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      walProvider<a name="line.139"></a>
-<span class="sourceLineNo">140</span>        .addWALActionsListener(new ReplicationSourceWALActionListener(conf, replicationManager));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      if (walProvider instanceof SyncReplicationWALProvider) {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>        SyncReplicationWALProvider syncWALProvider = (SyncReplicationWALProvider) walProvider;<a name="line.142"></a>
-<span class="sourceLineNo">143</span>        peerActionListener = syncWALProvider;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>        syncWALProvider.setPeerInfoProvider(syncReplicationPeerInfoProvider);<a name="line.144"></a>
-<span class="sourceLineNo">145</span>        // for sync replication state change, we need to reload the state twice, you can see the<a name="line.145"></a>
-<span class="sourceLineNo">146</span>        // code in PeerProcedureHandlerImpl, so here we need to go over the sync replication peers<a name="line.146"></a>
-<span class="sourceLineNo">147</span>        // to see if any of them are in the middle of the two refreshes, if so, we need to manually<a name="line.147"></a>
-<span class="sourceLineNo">148</span>        // repeat the action we have done in the first refresh, otherwise when the second refresh<a name="line.148"></a>
-<span class="sourceLineNo">149</span>        // comes we will be in trouble, such as NPE.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        replicationPeers.getAllPeerIds().stream().map(replicationPeers::getPeer)<a name="line.150"></a>
-<span class="sourceLineNo">151</span>            .filter(p -&gt; p.getPeerConfig().isSyncReplication())<a name="line.151"></a>
-<span class="sourceLineNo">152</span>            .filter(p -&gt; p.getNewSyncReplicationState() != SyncReplicationState.NONE)<a name="line.152"></a>
-<span class="sourceLineNo">153</span>            .forEach(p -&gt; syncWALProvider.peerSyncReplicationStateChange(p.getId(),<a name="line.153"></a>
-<span class="sourceLineNo">154</span>              p.getSyncReplicationState(), p.getNewSyncReplicationState(), 0));<a name="line.154"></a>
-<span class="sourceLineNo">155</span>      }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    this.statsThreadPeriod =<a name="line.157"></a>
-<span class="sourceLineNo">158</span>        this.conf.getInt("replication.stats.thread.period.seconds", 5 * 60);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    LOG.debug("Replication stats-in-log period={} seconds",  this.statsThreadPeriod);<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    this.replicationLoad = new ReplicationLoad();<a name="line.160"></a>
-<span class="sourceLineNo">161</span><a name="line.161"></a>
-<span class="sourceLineNo">162</span>    this.peerProcedureHandler =<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      new PeerProcedureHandlerImpl(replicationManager, peerActionListener);<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>  @Override<a name="line.166"></a>
-<span class="sourceLineNo">167</span>  public PeerProcedureHandler getPeerProcedureHandler() {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    return peerProcedureHandler;<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>   * Stops replication service.<a name="line.172"></a>
-<span class="sourceLineNo">173</span>   */<a name="line.173"></a>
-<span class="sourceLineNo">174</span>  @Override<a name="line.174"></a>
-<span class="sourceLineNo">175</span>  public void stopReplicationService() {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    join();<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>  /**<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   * Join with the replication threads<a name="line.180"></a>
-<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
-<span class="sourceLineNo">182</span>  public void join() {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    this.replicationManager.join();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    if (this.replicationSink != null) {<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      this.replicationSink.stopReplicationSinkServices();<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    }<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    scheduleThreadPool.shutdown();<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>   * Carry on the list of log entries down to the sink<a name="line.191"></a>
-<span class="sourceLineNo">192</span>   * @param entries list of entries to replicate<a name="line.192"></a>
-<span class="sourceLineNo">193</span>   * @param cells The data -- the cells -- that &lt;code&gt;entries&lt;/code&gt; describes (the entries do not<a name="line.193"></a>
-<span class="sourceLineNo">194</span>   *          contain the Cells we are replicating; they are passed here on the side in this<a name="line.194"></a>
-<span class="sourceLineNo">195</span>   *          CellScanner).<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * @param replicationClusterId Id which will uniquely identify source cluster FS client<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   *          configurations in the replication configuration directory<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * @param sourceBaseNamespaceDirPath Path that point to the source cluster base namespace<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   *          directory required for replicating hfiles<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * @param sourceHFileArchiveDirPath Path that point to the source cluster hfile archive directory<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * @throws IOException<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  @Override<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public void replicateLogEntries(List&lt;WALEntry&gt; entries, CellScanner cells,<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      String replicationClusterId, String sourceBaseNamespaceDirPath,<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      String sourceHFileArchiveDirPath) throws IOException {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    this.replicationSink.replicateEntries(entries, cells, replicationClusterId,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>      sourceBaseNamespaceDirPath, sourceHFileArchiveDirPath);<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>   * If replication is enabled and this cluster is a master,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * it starts<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @throws IOException<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 void startReplicationService() throws IOException {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    this.replicationManager.init();<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    this.replicationSink = new ReplicationSink(this.conf);<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    this.scheduleThreadPool.scheduleAtFixedRate(<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      new ReplicationStatisticsTask(this.replicationSink, this.replicationManager),<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      statsThreadPeriod, statsThreadPeriod, TimeUnit.SECONDS);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    LOG.info("{} started", this.server.toString());<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>  /**<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * Get the replication sources manager<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return the manager if replication is enabled, else returns false<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   */<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  public ReplicationSourceManager getReplicationManager() {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return this.replicationManager;<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>  void addHFileRefsToQueue(TableName tableName, byte[] family, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      throws IOException {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    try {<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      this.replicationManager.addHFileRefs(tableName, family, pairs);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    } catch (IOException e) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      LOG.error("Failed to add hfile references in the replication queue.", e);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      throw e;<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>   * Statistics task. Periodically prints the cache statistics to the log.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  private final static class ReplicationStatisticsTask implements Runnable {<a name="line.247"></a>
-<span class="sourceLineNo">248</span><a name="line.248"></a>
-<span class="sourceLineNo">249</span>    private final ReplicationSink replicationSink;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    private final ReplicationSourceManager replicationManager;<a name="line.250"></a>
-<span class="sourceLineNo">251</span><a name="line.251"></a>
-<span class="sourceLineNo">252</span>    public ReplicationStatisticsTask(ReplicationSink replicationSink,<a name="line.252"></a>
-<span class="sourceLineNo">253</span>        ReplicationSourceManager replicationManager) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      this.replicationManager = replicationManager;<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      this.replicationSink = replicationSink;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>    }<a name="line.256"></a>
-<span class="sourceLineNo">257</span><a name="line.257"></a>
-<span class="sourceLineNo">258</span>    @Override<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public void run() {<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      printStats(this.replicationManager.getStats());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      printStats(this.replicationSink.getStats());<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>    private void printStats(String stats) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      if (!stats.isEmpty()) {<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        LOG.info(stats);<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><a name="line.270"></a>
-<span class="sourceLineNo">271</span>  @Override<a name="line.271"></a>
-<span class="sourceLineNo">272</span>  public ReplicationLoad refreshAndGetReplicationLoad() {<a name="line.272"></a>
-<span class="sourceLineNo">273</span>    if (this.replicationLoad == null) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      return null;<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    }<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    // always build for latest data<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    buildReplicationLoad();<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    return this.replicationLoad;<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>  private void buildReplicationLoad() {<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    allSources.addAll(this.replicationManager.getSources());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>    allSources.addAll(this.replicationManager.getOldSources());<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    // get sink<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    MetricsSink sinkMetrics = this.replicationSink.getSinkMetrics();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    this.replicationLoad.buildReplicationLoad(allSources, sinkMetrics);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>  }<a name="line.288"></a>
-<span class="sourceLineNo">289</span><a name="line.289"></a>
-<span class="sourceLineNo">290</span>  @Override<a name="line.290"></a>
-<span class="sourceLineNo">291</span>  public SyncReplicationPeerInfoProvider getSyncReplicationPeerInfoProvider() {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    return syncReplicationPeerInfoProvider;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>  }<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>  @Override<a name="line.295"></a>
-<span class="sourceLineNo">296</span>  public ReplicationPeers getReplicationPeers() {<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    return replicationPeers;<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">025</span>import org.apache.hadoop.conf.Configuration;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.fs.FileSystem;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.Path;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.CompatibilitySingletonFactory;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.HConstants;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.ScheduledChore;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.Server;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.Stoppable;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.TableName;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.regionserver.ReplicationSourceService;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.replication.ReplicationFactory;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.replication.ReplicationPeers;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.replication.ReplicationStorageFactory;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.replication.ReplicationTracker;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.replication.ReplicationUtils;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.replication.SyncReplicationState;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.wal.SyncReplicationWALProvider;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.zookeeper.ZKClusterId;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.zookeeper.KeeperException;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.slf4j.Logger;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.slf4j.LoggerFactory;<a name="line.49"></a>
+<span class="sourceLineNo">050</span><a name="line.50"></a>
+<span class="sourceLineNo">051</span>/**<a name="line.51"></a>
+<span class="sourceLineNo">052</span> * Gateway to Replication. Used by {@link org.apache.hadoop.hbase.regionserver.HRegionServer}.<a name="line.52"></a>
+<span class="sourceLineNo">053</span> */<a name="line.53"></a>
+<span class="sourceLineNo">054</span>@InterfaceAudience.Private<a name="line.54"></a>
+<span class="sourceLineNo">055</span>public class Replication implements ReplicationSourceService {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>  private static final Logger LOG =<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      LoggerFactory.getLogger(Replication.class);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  private boolean isReplicationForBulkLoadDataEnabled;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  private ReplicationSourceManager replicationManager;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  private ReplicationQueueStorage queueStorage;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  private ReplicationPeers replicationPeers;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private ReplicationTracker replicationTracker;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  private Configuration conf;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  private SyncReplicationPeerInfoProvider syncReplicationPeerInfoProvider;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  // Hosting server<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private Server server;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private int statsPeriod;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  // ReplicationLoad to access replication metrics<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private ReplicationLoad replicationLoad;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private MetricsReplicationGlobalSourceSource globalMetricsSource;<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private PeerProcedureHandler peerProcedureHandler;<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>   * Empty constructor<a name="line.75"></a>
+<span class="sourceLineNo">076</span>   */<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  public Replication() {<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>  @Override<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public void initialize(Server server, FileSystem fs, Path logDir, Path oldLogDir,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      WALProvider walProvider) throws IOException {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.server = server;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    this.conf = this.server.getConfiguration();<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    this.isReplicationForBulkLoadDataEnabled =<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      ReplicationUtils.isReplicationForBulkLoadDataEnabled(this.conf);<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    if (this.isReplicationForBulkLoadDataEnabled) {<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      if (conf.get(HConstants.REPLICATION_CLUSTER_ID) == null<a name="line.88"></a>
+<span class="sourceLineNo">089</span>          || conf.get(HConstants.REPLICATION_CLUSTER_ID).isEmpty()) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        throw new IllegalArgumentException(HConstants.REPLICATION_CLUSTER_ID<a name="line.90"></a>
+<span class="sourceLineNo">091</span>            + " cannot be null/empty when " + HConstants.REPLICATION_BULKLOAD_ENABLE_KEY<a name="line.91"></a>
+<span class="sourceLineNo">092</span>            + " is set to true.");<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><a name="line.95"></a>
+<span class="sourceLineNo">096</span>    try {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      this.queueStorage =<a name="line.97"></a>
+<span class="sourceLineNo">098</span>          ReplicationStorageFactory.getReplicationQueueStorage(server.getZooKeeper(), conf);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>      this.replicationPeers =<a name="line.99"></a>
+<span class="sourceLineNo">100</span>          ReplicationFactory.getReplicationPeers(server.getZooKeeper(), this.conf);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      this.replicationPeers.init();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      this.replicationTracker =<a name="line.102"></a>
+<span class="sourceLineNo">103</span>          ReplicationFactory.getReplicationTracker(server.getZooKeeper(), this.server, this.server);<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    } catch (Exception e) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>      throw new IOException("Failed replication handler create", e);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    }<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    UUID clusterId = null;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    try {<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      clusterId = ZKClusterId.getUUIDForCluster(this.server.getZooKeeper());<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    } catch (KeeperException ke) {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      throw new IOException("Could not read cluster id", ke);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    }<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    SyncReplicationPeerMappingManager mapping = new SyncReplicationPeerMappingManager();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    this.globalMetricsSource = CompatibilitySingletonFactory<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        .getInstance(MetricsReplicationSourceFactory.class).getGlobalSource();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>    this.replicationManager = new ReplicationSourceManager(queueStorage, replicationPeers,<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        replicationTracker, conf, this.server, fs, logDir, oldLogDir, clusterId,<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        walProvider != null ? walProvider.getWALFileLengthProvider() : p -&gt; OptionalLong.empty(),<a name="line.118"></a>
+<span class="sourceLineNo">119</span>        mapping, globalMetricsSource);<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    this.syncReplicationPeerInfoProvider =<a name="line.120"></a>
+<span class="sourceLineNo">121</span>        new SyncReplicationPeerInfoProviderImpl(replicationPeers, mapping);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    PeerActionListener peerActionListener = PeerActionListener.DUMMY;<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    if (walProvider != null) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      walProvider<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        .addWALActionsListener(new ReplicationSourceWALActionListener(conf, replicationManager));<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      if (walProvider instanceof SyncReplicationWALProvider) {<a name="line.126"></a>
+<span class="sourceLineNo">127</span>        SyncReplicationWALProvider syncWALProvider = (SyncReplicationWALProvider) walProvider;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        peerActionListener = syncWALProvider;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        syncWALProvider.setPeerInfoProvider(syncReplicationPeerInfoProvider);<a name="line.129"></a>
+<span class="sourceLineNo">130</span>        // for sync replication state change, we need to reload the state twice, you can see the<a name="line.130"></a>
+<span class="sourceLineNo">131</span>        // code in PeerProcedureHandlerImpl, so here we need to go over the sync replication peers<a name="line.131"></a>
+<span class="sourceLineNo">132</span>        // to see if any of them are in the middle of the two refreshes, if so, we need to manually<a name="line.132"></a>
+<span class="sourceLineNo">133</span>        // repeat the action we have done in the first refresh, otherwise when the second refresh<a name="line.133"></a>
+<span class="sourceLineNo">134</span>        // comes we will be in trouble, such as NPE.<a name="line.134"></a>
+<span class="sourceLineNo">135</span>        replicationPeers.getAllPeerIds().stream().map(replicationPeers::getPeer)<a name="line.135"></a>
+<span class="sourceLineNo">136</span>            .filter(p -&gt; p.getPeerConfig().isSyncReplication())<a name="line.136"></a>
+<span class="sourceLineNo">137</span>            .filter(p -&gt; p.getNewSyncReplicationState() != SyncReplicationState.NONE)<a name="line.137"></a>
+<span class="sourceLineNo">138</span>            .forEach(p -&gt; syncWALProvider.peerSyncReplicationStateChange(p.getId(),<a name="line.138"></a>
+<span class="sourceLineNo">139</span>              p.getSyncReplicationState(), p.getNewSyncReplicationState(), 0));<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      }<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    }<a name="line.141"></a>
+<span class="sourceLineNo">142</span>    this.statsPeriod =<a name="line.142"></a>
+<span class="sourceLineNo">143</span>        this.conf.getInt("replication.stats.thread.period.seconds", 5 * 60);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    this.replicationLoad = new ReplicationLoad();<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    this.peerProcedureHandler =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>      new PeerProcedureHandlerImpl(replicationManager, peerActionListener);<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 PeerProcedureHandler getPeerProcedureHandler() {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    return peerProcedureHandler;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  }<a name="line.153"></a>
+<span class="sourceLineNo">154</span><a name="line.154"></a>
+<span class="sourceLineNo">155</span>  /**<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   * Stops replication service.<a name="line.156"></a>
+<span class="sourceLineNo">157</span>   */<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  @Override<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public void stopReplicationService() {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    this.replicationManager.join();<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>   * If replication is enabled and this cluster is a master,<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * it starts<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @throws IOException<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  @Override<a name="line.168"></a>
+<span class="sourceLineNo">169</span>  public void startReplicationService() throws IOException {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    this.replicationManager.init();<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    this.server.getChoreService().scheduleChore(<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      new ReplicationStatisticsChore("ReplicationSourceStatistics", server, statsPeriod));<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    LOG.info("{} started", this.server.toString());<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>  /**<a name="line.176"></a>
+<span class="sourceLineNo">177</span>   * Get the replication sources manager<a name="line.177"></a>
+<span class="sourceLineNo">178</span>   * @return the manager if replication is enabled, else returns false<a name="line.178"></a>
+<span class="sourceLineNo">179</span>   */<a name="line.179"></a>
+<span class="sourceLineNo">180</span>  public ReplicationSourceManager getReplicationManager() {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return this.replicationManager;<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>  void addHFileRefsToQueue(TableName tableName, byte[] family, List&lt;Pair&lt;Path, Path&gt;&gt; pairs)<a name="line.184"></a>
+<span class="sourceLineNo">185</span>      throws IOException {<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    try {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      this.replicationManager.addHFileRefs(tableName, family, pairs);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    } catch (IOException e) {<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      LOG.error("Failed to add hfile references in the replication queue.", e);<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      throw e;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    }<a name="line.191"></a>
+<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>  /**<a name="line.194"></a>
+<span class="sourceLineNo">195</span>   * Statistics task. Periodically prints the cache statistics to the log.<a name="line.195"></a>
+<span class="sourceLineNo">196</span>   */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  private final class ReplicationStatisticsChore extends ScheduledChore {<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>    ReplicationStatisticsChore(String name, Stoppable stopper, int period) {<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      super(name, stopper, period);<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>    @Override<a name="line.203"></a>
+<span class="sourceLineNo">204</span>    protected void chore() {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      printStats(replicationManager.getStats());<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    }<a name="line.206"></a>
+<span class="sourceLineNo">207</span><a name="line.207"></a>
+<span class="sourceLineNo">208</span>    private void printStats(String stats) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>      if (!stats.isEmpty()) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LOG.info(stats);<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>  }<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 ReplicationLoad refreshAndGetReplicationLoad() {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    if (this.replicationLoad == null) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      return null;<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    // always build for latest data<a name="line.220"></a>
+<span class="sourceLineNo">221</span>    List&lt;ReplicationSourceInterface&gt; allSources = new ArrayList&lt;&gt;();<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    allSources.addAll(this.replicationManager.getSources());<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    allSources.addAll(this.replicationManager.getOldSources());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    this.replicationLoad.buildReplicationLoad(allSources, null);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    return this.replicationLoad;<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 SyncReplicationPeerInfoProvider getSyncReplicationPeerInfoProvider() {<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    return syncReplicationPeerInfoProvider;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  @Override<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  public ReplicationPeers getReplicationPeers() {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    return replicationPeers;<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>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html
index 29b6953..fff4624 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.html
@@ -44,34 +44,34 @@
 <span class="sourceLineNo">036</span><a name="line.36"></a>
 <span class="sourceLineNo">037</span>  // Empty load instance.<a name="line.37"></a>
 <span class="sourceLineNo">038</span>  public static final ReplicationLoad EMPTY_REPLICATIONLOAD = new ReplicationLoad();<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  private MetricsSink sinkMetrics;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  private List&lt;ClusterStatusProtos.ReplicationLoadSource&gt; replicationLoadSourceEntries;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  private ClusterStatusProtos.ReplicationLoadSink replicationLoadSink;<a name="line.42"></a>
-<span class="sourceLineNo">043</span><a name="line.43"></a>
-<span class="sourceLineNo">044</span>  /** default constructor */<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  public ReplicationLoad() {<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    super();<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  }<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * buildReplicationLoad<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * @param sources List of ReplicationSource instances for which metrics should be reported<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * @param skMetrics<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>  public void buildReplicationLoad(final List&lt;ReplicationSourceInterface&gt; sources,<a name="line.55"></a>
-<span class="sourceLineNo">056</span>      final MetricsSink skMetrics) {<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    this.sinkMetrics = skMetrics;<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>    // build the SinkLoad<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    ClusterStatusProtos.ReplicationLoadSink.Builder rLoadSinkBuild =<a name="line.60"></a>
-<span class="sourceLineNo">061</span>        ClusterStatusProtos.ReplicationLoadSink.newBuilder();<a name="line.61"></a>
-<span class="sourceLineNo">062</span>    rLoadSinkBuild.setAgeOfLastAppliedOp(sinkMetrics.getAgeOfLastAppliedOp());<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    rLoadSinkBuild.setTimeStampsOfLastAppliedOp(sinkMetrics.getTimestampOfLastAppliedOp());<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    rLoadSinkBuild.setTimestampStarted(sinkMetrics.getStartTimestamp());<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    rLoadSinkBuild.setTotalOpsProcessed(sinkMetrics.getAppliedOps());<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    this.replicationLoadSink = rLoadSinkBuild.build();<a name="line.66"></a>
+<span class="sourceLineNo">039</span><a name="line.39"></a>
+<span class="sourceLineNo">040</span>  private List&lt;ClusterStatusProtos.ReplicationLoadSource&gt; replicationLoadSourceEntries;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private ClusterStatusProtos.ReplicationLoadSink replicationLoadSink;<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  /** default constructor */<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  public ReplicationLoad() {<a name="line.44"></a>
+<span class="sourceLineNo">045</span>    super();<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  }<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  /**<a name="line.48"></a>
+<span class="sourceLineNo">049</span>   * buildReplicationLoad<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   * @param sources List of ReplicationSource instances for which metrics should be reported<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * @param sinkMetrics metrics of the replication sink<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>  public void buildReplicationLoad(final List&lt;ReplicationSourceInterface&gt; sources,<a name="line.54"></a>
+<span class="sourceLineNo">055</span>      final MetricsSink sinkMetrics) {<a name="line.55"></a>
+<span class="sourceLineNo">056</span><a name="line.56"></a>
+<span class="sourceLineNo">057</span>    if (sinkMetrics != null) {<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      // build the SinkLoad<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      ClusterStatusProtos.ReplicationLoadSink.Builder rLoadSinkBuild =<a name="line.59"></a>
+<span class="sourceLineNo">060</span>        ClusterStatusProtos.ReplicationLoadSink.newBuilder();<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      rLoadSinkBuild.setAgeOfLastAppliedOp(sinkMetrics.getAgeOfLastAppliedOp());<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      rLoadSinkBuild.setTimeStampsOfLastAppliedOp(sinkMetrics.getTimestampOfLastAppliedOp());<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      rLoadSinkBuild.setTimestampStarted(sinkMetrics.getStartTimestamp());<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      rLoadSinkBuild.setTotalOpsProcessed(sinkMetrics.getAppliedOps());<a name="line.64"></a>
+<span class="sourceLineNo">065</span>      this.replicationLoadSink = rLoadSinkBuild.build();<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>    this.replicationLoadSourceEntries = new ArrayList&lt;&gt;();<a name="line.68"></a>
 <span class="sourceLineNo">069</span>    for (ReplicationSourceInterface source : sources) {<a name="line.69"></a>
@@ -165,8 +165,7 @@
 <span class="sourceLineNo">157</span>  public String toString() {<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    return this.sourceToString() + System.getProperty("line.separator") + this.sinkToString();<a name="line.158"></a>
 <span class="sourceLineNo">159</span>  }<a name="line.159"></a>
-<span class="sourceLineNo">160</span><a name="line.160"></a>
-<span class="sourceLineNo">161</span>}<a name="line.161"></a>
+<span class="sourceLineNo">160</span>}<a name="line.160"></a>
 
 
 
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 1987851..12a15f7 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
@@ -6,7 +6,7 @@
 </head>
 <body>
 <div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<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>
@@ -682,187 +682,188 @@
 <span class="sourceLineNo">674</span>      Threads.shutdown(initThread, this.sleepForRetries);<a name="line.674"></a>
 <span class="sourceLineNo">675</span>    }<a name="line.675"></a>
 <span class="sourceLineNo">676</span>    Collection&lt;ReplicationSourceShipper&gt; workers = workerThreads.values();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    for (ReplicationSourceShipper worker : workers) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      worker.stopWorker();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if(worker.entryReader != null) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        worker.entryReader.setReaderRunning(false);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      }<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    for (ReplicationSourceShipper worker : workers) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      if (worker.isAlive() || worker.entryReader.isAlive()) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        try {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          // Wait worker to stop<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          Thread.sleep(this.sleepForRetries);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        } catch (InterruptedException e) {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          LOG.info("{} Interrupted while waiting {} to stop", logPeerId(), worker.getName());<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          Thread.currentThread().interrupt();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>        // If worker still is alive after waiting, interrupt it<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        if (worker.isAlive()) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>          worker.interrupt();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        }<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        // If entry reader is alive after waiting, interrupt it<a name="line.697"></a>
-<span class="sourceLineNo">698</span>        if (worker.entryReader.isAlive()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>          worker.entryReader.interrupt();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      }<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (this.replicationEndpoint != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      this.replicationEndpoint.stop();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    if (join) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      for (ReplicationSourceShipper worker : workers) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        Threads.shutdown(worker, this.sleepForRetries);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        LOG.info("{} ReplicationSourceWorker {} terminated", logPeerId(), worker.getName());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      }<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      if (this.replicationEndpoint != null) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        try {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>          this.replicationEndpoint.awaitTerminated(sleepForRetries * maxRetriesMultiplier,<a name="line.714"></a>
-<span class="sourceLineNo">715</span>            TimeUnit.MILLISECONDS);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        } catch (TimeoutException te) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          LOG.warn("{} Got exception while waiting for endpoint to shutdown "<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            + "for replication source : {}", logPeerId(), this.queueId, te);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        }<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    if (clearMetrics) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      // Can be null in test context.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      if (this.metrics != null) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        this.metrics.clear();<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public String getQueueId() {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    return this.queueId;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public Path getCurrentPath() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // only for testing<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      if (worker.getCurrentPath() != null) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        return worker.getCurrentPath();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    return null;<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>  @Override<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  public boolean isSourceActive() {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    return !this.server.isStopped() &amp;&amp; this.sourceRunning;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Comparator used to compare logs together based on their start time<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public static class LogsComparator implements Comparator&lt;Path&gt; {<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    @Override<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    public int compare(Path o1, Path o2) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      return Long.compare(getTS(o1), getTS(o2));<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>    /**<a name="line.761"></a>
-<span class="sourceLineNo">762</span>     * &lt;p&gt;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>     * Split a path to get the start time<a name="line.763"></a>
-<span class="sourceLineNo">764</span>     * &lt;/p&gt;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>     * &lt;p&gt;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>     * For example: 10.20.20.171%3A60020.1277499063250<a name="line.766"></a>
-<span class="sourceLineNo">767</span>     * &lt;/p&gt;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>     * @param p path to split<a name="line.768"></a>
-<span class="sourceLineNo">769</span>     * @return start time<a name="line.769"></a>
-<span class="sourceLineNo">770</span>     */<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    private static long getTS(Path p) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return AbstractFSWALProvider.getWALStartTimeFromWALName(p.getName());<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>  }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>  public ReplicationQueueInfo getReplicationQueueInfo() {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    return replicationQueueInfo;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>  public boolean isWorkerRunning(){<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    for(ReplicationSourceShipper worker : this.workerThreads.values()){<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      if(worker.isActive()){<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        return worker.isActive();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      }<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    return false;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  }<a name="line.787"></a>
-<span class="sourceLineNo">788</span><a name="line.788"></a>
-<span class="sourceLineNo">789</span>  @Override<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  public String getStats() {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    StringBuilder sb = new StringBuilder();<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        .append(", current progress: \n");<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    for (Map.Entry&lt;String, ReplicationSourceShipper&gt; entry : workerThreads.entrySet()) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      String walGroupId = entry.getKey();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      ReplicationSourceShipper worker = entry.getValue();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      long position = worker.getCurrentPosition();<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      Path currentPath = worker.getCurrentPath();<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      if (currentPath != null) {<a name="line.800"></a>
-<span class="sourceLineNo">801</span>        sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            .append(position).append("\n");<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      } else {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>        sb.append("no replication ongoing, waiting for new log");<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      }<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    return sb.toString();<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>  @Override<a name="line.810"></a>
-<span class="sourceLineNo">811</span>  public MetricsSource getSourceMetrics() {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    return this.metrics;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  @Override<a name="line.815"></a>
-<span class="sourceLineNo">816</span>  //offsets totalBufferUsed by deducting shipped batchSize.<a name="line.816"></a>
-<span class="sourceLineNo">817</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    if (throttler.isEnabled()) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      throttler.addPushSize(batchSize);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    long newBufferUsed = totalBufferUsed.addAndGet(-batchSize);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    // Record the new buffer usage<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    this.manager.getGlobalMetrics().setWALReaderEditsBufferBytes(newBufferUsed);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>  @Override<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    return walFileLengthProvider;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>  }<a name="line.830"></a>
-<span class="sourceLineNo">831</span><a name="line.831"></a>
-<span class="sourceLineNo">832</span>  @Override<a name="line.832"></a>
-<span class="sourceLineNo">833</span>  public ServerName getServerWALsBelongTo() {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    return server.getServerName();<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  }<a name="line.835"></a>
-<span class="sourceLineNo">836</span><a name="line.836"></a>
-<span class="sourceLineNo">837</span>  @Override<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public ReplicationPeer getPeer() {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    return replicationPeer;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>  }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span>  Server getServer() {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    return server;<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>  ReplicationQueueStorage getQueueStorage() {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    return queueStorage;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  }<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>  void removeWorker(ReplicationSourceShipper worker) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    workerThreads.remove(worker.walGroupId, worker);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  private String logPeerId(){<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return "peerId=" + this.getPeerId() + ",";<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>}<a name="line.857"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    for (ReplicationSourceShipper worker : workers) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      worker.stopWorker();<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      if (worker.entryReader != null) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        worker.entryReader.setReaderRunning(false);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      }<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      if (worker.isAlive() || worker.entryReader.isAlive()) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        try {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          // Wait worker to stop<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          Thread.sleep(this.sleepForRetries);<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        } catch (InterruptedException e) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>          LOG.info("{} Interrupted while waiting {} to stop", logPeerId(), worker.getName());<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          Thread.currentThread().interrupt();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>        }<a name="line.690"></a>
+<span class="sourceLineNo">691</span>        // If worker still is alive after waiting, interrupt it<a name="line.691"></a>
+<span class="sourceLineNo">692</span>        if (worker.isAlive()) {<a name="line.692"></a>
+<span class="sourceLineNo">693</span>          worker.interrupt();<a name="line.693"></a>
+<span class="sourceLineNo">694</span>        }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>        // If entry reader is alive after waiting, interrupt it<a name="line.695"></a>
+<span class="sourceLineNo">696</span>        if (worker.entryReader.isAlive()) {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>          worker.entryReader.interrupt();<a name="line.697"></a>
+<span class="sourceLineNo">698</span>        }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>      }<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      //If worker is already stopped but there was still entries batched,<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      //we need to clear buffer used for non processed entries<a name="line.701"></a>
+<span class="sourceLineNo">702</span>      worker.clearWALEntryBatch();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    }<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span>    if (this.replicationEndpoint != null) {<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      this.replicationEndpoint.stop();<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    }<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    if (join) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      for (ReplicationSourceShipper worker : workers) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        Threads.shutdown(worker, this.sleepForRetries);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>        LOG.info("{} ReplicationSourceWorker {} terminated", logPeerId(), worker.getName());<a name="line.711"></a>
+<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      if (this.replicationEndpoint != null) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>        try {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>          this.replicationEndpoint.awaitTerminated(sleepForRetries * maxRetriesMultiplier,<a name="line.715"></a>
+<span class="sourceLineNo">716</span>            TimeUnit.MILLISECONDS);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        } catch (TimeoutException te) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>          LOG.warn("{} Got exception while waiting for endpoint to shutdown "<a name="line.718"></a>
+<span class="sourceLineNo">719</span>            + "for replication source : {}", logPeerId(), this.queueId, te);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        }<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>    if (clearMetrics) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      // Can be null in test context.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      if (this.metrics != null) {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        this.metrics.clear();<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
+<span class="sourceLineNo">728</span>    }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>  @Override<a name="line.731"></a>
+<span class="sourceLineNo">732</span>  public String getQueueId() {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    return this.queueId;<a name="line.733"></a>
+<span class="sourceLineNo">734</span>  }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>  @Override<a name="line.736"></a>
+<span class="sourceLineNo">737</span>  public Path getCurrentPath() {<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    // only for testing<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      if (worker.getCurrentPath() != null) {<a name="line.740"></a>
+<span class="sourceLineNo">741</span>        return worker.getCurrentPath();<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    return null;<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  @Override<a name="line.747"></a>
+<span class="sourceLineNo">748</span>  public boolean isSourceActive() {<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    return !this.server.isStopped() &amp;&amp; this.sourceRunning;<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>  /**<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   * Comparator used to compare logs together based on their start time<a name="line.753"></a>
+<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
+<span class="sourceLineNo">755</span>  public static class LogsComparator implements Comparator&lt;Path&gt; {<a name="line.755"></a>
+<span class="sourceLineNo">756</span><a name="line.756"></a>
+<span class="sourceLineNo">757</span>    @Override<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    public int compare(Path o1, Path o2) {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      return Long.compare(getTS(o1), getTS(o2));<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    }<a name="line.760"></a>
+<span class="sourceLineNo">761</span><a name="line.761"></a>
+<span class="sourceLineNo">762</span>    /**<a name="line.762"></a>
+<span class="sourceLineNo">763</span>     * &lt;p&gt;<a name="line.763"></a>
+<span class="sourceLineNo">764</span>     * Split a path to get the start time<a name="line.764"></a>
+<span class="sourceLineNo">765</span>     * &lt;/p&gt;<a name="line.765"></a>
+<span class="sourceLineNo">766</span>     * &lt;p&gt;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>     * For example: 10.20.20.171%3A60020.1277499063250<a name="line.767"></a>
+<span class="sourceLineNo">768</span>     * &lt;/p&gt;<a name="line.768"></a>
+<span class="sourceLineNo">769</span>     * @param p path to split<a name="line.769"></a>
+<span class="sourceLineNo">770</span>     * @return start time<a name="line.770"></a>
+<span class="sourceLineNo">771</span>     */<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    private static long getTS(Path p) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      return AbstractFSWALProvider.getWALStartTimeFromWALName(p.getName());<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
+<span class="sourceLineNo">775</span>  }<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span>  public ReplicationQueueInfo getReplicationQueueInfo() {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    return replicationQueueInfo;<a name="line.778"></a>
+<span class="sourceLineNo">779</span>  }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>  public boolean isWorkerRunning(){<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    for(ReplicationSourceShipper worker : this.workerThreads.values()){<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      if(worker.isActive()){<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        return worker.isActive();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      }<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    return false;<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  @Override<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  public String getStats() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    StringBuilder sb = new StringBuilder();<a name="line.792"></a>
+<span class="sourceLineNo">793</span>    sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.793"></a>
+<span class="sourceLineNo">794</span>        .append(", current progress: \n");<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    for (Map.Entry&lt;String, ReplicationSourceShipper&gt; entry : workerThreads.entrySet()) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      String walGroupId = entry.getKey();<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      ReplicationSourceShipper worker = entry.getValue();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      long position = worker.getCurrentPosition();<a name="line.798"></a>
+<span class="sourceLineNo">799</span>      Path currentPath = worker.getCurrentPath();<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.800"></a>
+<span class="sourceLineNo">801</span>      if (currentPath != null) {<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.802"></a>
+<span class="sourceLineNo">803</span>            .append(position).append("\n");<a name="line.803"></a>
+<span class="sourceLineNo">804</span>      } else {<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        sb.append("no replication ongoing, waiting for new log");<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      }<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    return sb.toString();<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>  @Override<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  public MetricsSource getSourceMetrics() {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    return this.metrics;<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>  @Override<a name="line.816"></a>
+<span class="sourceLineNo">817</span>  //offsets totalBufferUsed by deducting shipped batchSize.<a name="line.817"></a>
+<span class="sourceLineNo">818</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>    if (throttler.isEnabled()) {<a name="line.819"></a>
+<span class="sourceLineNo">820</span>      throttler.addPushSize(batchSize);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    long newBufferUsed = totalBufferUsed.addAndGet(-batchSize);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    // Record the new buffer usage<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    this.manager.getGlobalMetrics().setWALReaderEditsBufferBytes(newBufferUsed);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>  @Override<a name="line.828"></a>
+<span class="sourceLineNo">829</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    return walFileLengthProvider;<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>  @Override<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  public ServerName getServerWALsBelongTo() {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    return server.getServerName();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>  @Override<a name="line.838"></a>
+<span class="sourceLineNo">839</span>  public ReplicationPeer getPeer() {<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    return replicationPeer;<a name="line.840"></a>
+<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
+<span class="sourceLineNo">842</span><a name="line.842"></a>
+<span class="sourceLineNo">843</span>  Server getServer() {<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    return server;<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>  ReplicationQueueStorage getQueueStorage() {<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    return queueStorage;<a name="line.848"></a>
+<span class="sourceLineNo">849</span>  }<a name="line.849"></a>
+<span class="sourceLineNo">850</span><a name="line.850"></a>
+<span class="sourceLineNo">851</span>  void removeWorker(ReplicationSourceShipper worker) {<a name="line.851"></a>
+<span class="sourceLineNo">852</span>    workerThreads.remove(worker.walGroupId, worker);<a name="line.852"></a>
+<span class="sourceLineNo">853</span>  }<a name="line.853"></a>
+<span class="sourceLineNo">854</span><a name="line.854"></a>
+<span class="sourceLineNo">855</span>  private String logPeerId(){<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    return "peerId=" + this.getPeerId() + ",";<a name="line.856"></a>
+<span class="sourceLineNo">857</span>  }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>}<a name="line.858"></a>
 
 
 
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 1987851..12a15f7 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
@@ -6,7 +6,7 @@
 </head>
 <body>
 <div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
+<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>
@@ -682,187 +682,188 @@
 <span class="sourceLineNo">674</span>      Threads.shutdown(initThread, this.sleepForRetries);<a name="line.674"></a>
 <span class="sourceLineNo">675</span>    }<a name="line.675"></a>
 <span class="sourceLineNo">676</span>    Collection&lt;ReplicationSourceShipper&gt; workers = workerThreads.values();<a name="line.676"></a>
-<span class="sourceLineNo">677</span>    for (ReplicationSourceShipper worker : workers) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>      worker.stopWorker();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>      if(worker.entryReader != null) {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>        worker.entryReader.setReaderRunning(false);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>      }<a name="line.681"></a>
-<span class="sourceLineNo">682</span>    }<a name="line.682"></a>
-<span class="sourceLineNo">683</span><a name="line.683"></a>
-<span class="sourceLineNo">684</span>    for (ReplicationSourceShipper worker : workers) {<a name="line.684"></a>
-<span class="sourceLineNo">685</span>      if (worker.isAlive() || worker.entryReader.isAlive()) {<a name="line.685"></a>
-<span class="sourceLineNo">686</span>        try {<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          // Wait worker to stop<a name="line.687"></a>
-<span class="sourceLineNo">688</span>          Thread.sleep(this.sleepForRetries);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>        } catch (InterruptedException e) {<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          LOG.info("{} Interrupted while waiting {} to stop", logPeerId(), worker.getName());<a name="line.690"></a>
-<span class="sourceLineNo">691</span>          Thread.currentThread().interrupt();<a name="line.691"></a>
-<span class="sourceLineNo">692</span>        }<a name="line.692"></a>
-<span class="sourceLineNo">693</span>        // If worker still is alive after waiting, interrupt it<a name="line.693"></a>
-<span class="sourceLineNo">694</span>        if (worker.isAlive()) {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>          worker.interrupt();<a name="line.695"></a>
-<span class="sourceLineNo">696</span>        }<a name="line.696"></a>
-<span class="sourceLineNo">697</span>        // If entry reader is alive after waiting, interrupt it<a name="line.697"></a>
-<span class="sourceLineNo">698</span>        if (worker.entryReader.isAlive()) {<a name="line.698"></a>
-<span class="sourceLineNo">699</span>          worker.entryReader.interrupt();<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        }<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      }<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    }<a name="line.702"></a>
-<span class="sourceLineNo">703</span><a name="line.703"></a>
-<span class="sourceLineNo">704</span>    if (this.replicationEndpoint != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>      this.replicationEndpoint.stop();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>    }<a name="line.706"></a>
-<span class="sourceLineNo">707</span>    if (join) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>      for (ReplicationSourceShipper worker : workers) {<a name="line.708"></a>
-<span class="sourceLineNo">709</span>        Threads.shutdown(worker, this.sleepForRetries);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        LOG.info("{} ReplicationSourceWorker {} terminated", logPeerId(), worker.getName());<a name="line.710"></a>
-<span class="sourceLineNo">711</span>      }<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      if (this.replicationEndpoint != null) {<a name="line.712"></a>
-<span class="sourceLineNo">713</span>        try {<a name="line.713"></a>
-<span class="sourceLineNo">714</span>          this.replicationEndpoint.awaitTerminated(sleepForRetries * maxRetriesMultiplier,<a name="line.714"></a>
-<span class="sourceLineNo">715</span>            TimeUnit.MILLISECONDS);<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        } catch (TimeoutException te) {<a name="line.716"></a>
-<span class="sourceLineNo">717</span>          LOG.warn("{} Got exception while waiting for endpoint to shutdown "<a name="line.717"></a>
-<span class="sourceLineNo">718</span>            + "for replication source : {}", logPeerId(), this.queueId, te);<a name="line.718"></a>
-<span class="sourceLineNo">719</span>        }<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      }<a name="line.720"></a>
-<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
-<span class="sourceLineNo">722</span>    if (clearMetrics) {<a name="line.722"></a>
-<span class="sourceLineNo">723</span>      // Can be null in test context.<a name="line.723"></a>
-<span class="sourceLineNo">724</span>      if (this.metrics != null) {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>        this.metrics.clear();<a name="line.725"></a>
-<span class="sourceLineNo">726</span>      }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    }<a name="line.727"></a>
-<span class="sourceLineNo">728</span>  }<a name="line.728"></a>
-<span class="sourceLineNo">729</span><a name="line.729"></a>
-<span class="sourceLineNo">730</span>  @Override<a name="line.730"></a>
-<span class="sourceLineNo">731</span>  public String getQueueId() {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    return this.queueId;<a name="line.732"></a>
-<span class="sourceLineNo">733</span>  }<a name="line.733"></a>
-<span class="sourceLineNo">734</span><a name="line.734"></a>
-<span class="sourceLineNo">735</span>  @Override<a name="line.735"></a>
-<span class="sourceLineNo">736</span>  public Path getCurrentPath() {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    // only for testing<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.738"></a>
-<span class="sourceLineNo">739</span>      if (worker.getCurrentPath() != null) {<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        return worker.getCurrentPath();<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    }<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    return null;<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>  @Override<a name="line.746"></a>
-<span class="sourceLineNo">747</span>  public boolean isSourceActive() {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    return !this.server.isStopped() &amp;&amp; this.sourceRunning;<a name="line.748"></a>
-<span class="sourceLineNo">749</span>  }<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>  /**<a name="line.751"></a>
-<span class="sourceLineNo">752</span>   * Comparator used to compare logs together based on their start time<a name="line.752"></a>
-<span class="sourceLineNo">753</span>   */<a name="line.753"></a>
-<span class="sourceLineNo">754</span>  public static class LogsComparator implements Comparator&lt;Path&gt; {<a name="line.754"></a>
-<span class="sourceLineNo">755</span><a name="line.755"></a>
-<span class="sourceLineNo">756</span>    @Override<a name="line.756"></a>
-<span class="sourceLineNo">757</span>    public int compare(Path o1, Path o2) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      return Long.compare(getTS(o1), getTS(o2));<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    }<a name="line.759"></a>
-<span class="sourceLineNo">760</span><a name="line.760"></a>
-<span class="sourceLineNo">761</span>    /**<a name="line.761"></a>
-<span class="sourceLineNo">762</span>     * &lt;p&gt;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>     * Split a path to get the start time<a name="line.763"></a>
-<span class="sourceLineNo">764</span>     * &lt;/p&gt;<a name="line.764"></a>
-<span class="sourceLineNo">765</span>     * &lt;p&gt;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>     * For example: 10.20.20.171%3A60020.1277499063250<a name="line.766"></a>
-<span class="sourceLineNo">767</span>     * &lt;/p&gt;<a name="line.767"></a>
-<span class="sourceLineNo">768</span>     * @param p path to split<a name="line.768"></a>
-<span class="sourceLineNo">769</span>     * @return start time<a name="line.769"></a>
-<span class="sourceLineNo">770</span>     */<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    private static long getTS(Path p) {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>      return AbstractFSWALProvider.getWALStartTimeFromWALName(p.getName());<a name="line.772"></a>
-<span class="sourceLineNo">773</span>    }<a name="line.773"></a>
-<span class="sourceLineNo">774</span>  }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>  public ReplicationQueueInfo getReplicationQueueInfo() {<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    return replicationQueueInfo;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>  }<a name="line.778"></a>
-<span class="sourceLineNo">779</span><a name="line.779"></a>
-<span class="sourceLineNo">780</span>  public boolean isWorkerRunning(){<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    for(ReplicationSourceShipper worker : this.workerThreads.values()){<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      if(worker.isActive()){<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        return worker.isActive();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      }<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    }<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    return false;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>  }<a name="line.787"></a>
-<span class="sourceLineNo">788</span><a name="line.788"></a>
-<span class="sourceLineNo">789</span>  @Override<a name="line.789"></a>
-<span class="sourceLineNo">790</span>  public String getStats() {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>    StringBuilder sb = new StringBuilder();<a name="line.791"></a>
-<span class="sourceLineNo">792</span>    sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        .append(", current progress: \n");<a name="line.793"></a>
-<span class="sourceLineNo">794</span>    for (Map.Entry&lt;String, ReplicationSourceShipper&gt; entry : workerThreads.entrySet()) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>      String walGroupId = entry.getKey();<a name="line.795"></a>
-<span class="sourceLineNo">796</span>      ReplicationSourceShipper worker = entry.getValue();<a name="line.796"></a>
-<span class="sourceLineNo">797</span>      long position = worker.getCurrentPosition();<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      Path currentPath = worker.getCurrentPath();<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.799"></a>
-<span class="sourceLineNo">800</span>      if (currentPath != null) {<a name="line.800"></a>
-<span class="sourceLineNo">801</span>        sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.801"></a>
-<span class="sourceLineNo">802</span>            .append(position).append("\n");<a name="line.802"></a>
-<span class="sourceLineNo">803</span>      } else {<a name="line.803"></a>
-<span class="sourceLineNo">804</span>        sb.append("no replication ongoing, waiting for new log");<a name="line.804"></a>
-<span class="sourceLineNo">805</span>      }<a name="line.805"></a>
-<span class="sourceLineNo">806</span>    }<a name="line.806"></a>
-<span class="sourceLineNo">807</span>    return sb.toString();<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>  @Override<a name="line.810"></a>
-<span class="sourceLineNo">811</span>  public MetricsSource getSourceMetrics() {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    return this.metrics;<a name="line.812"></a>
-<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
-<span class="sourceLineNo">814</span><a name="line.814"></a>
-<span class="sourceLineNo">815</span>  @Override<a name="line.815"></a>
-<span class="sourceLineNo">816</span>  //offsets totalBufferUsed by deducting shipped batchSize.<a name="line.816"></a>
-<span class="sourceLineNo">817</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    if (throttler.isEnabled()) {<a name="line.818"></a>
-<span class="sourceLineNo">819</span>      throttler.addPushSize(batchSize);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    }<a name="line.820"></a>
-<span class="sourceLineNo">821</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.821"></a>
-<span class="sourceLineNo">822</span>    long newBufferUsed = totalBufferUsed.addAndGet(-batchSize);<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    // Record the new buffer usage<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    this.manager.getGlobalMetrics().setWALReaderEditsBufferBytes(newBufferUsed);<a name="line.824"></a>
-<span class="sourceLineNo">825</span>  }<a name="line.825"></a>
-<span class="sourceLineNo">826</span><a name="line.826"></a>
-<span class="sourceLineNo">827</span>  @Override<a name="line.827"></a>
-<span class="sourceLineNo">828</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    return walFileLengthProvider;<a name="line.829"></a>
-<span class="sourceLineNo">830</span>  }<a name="line.830"></a>
-<span class="sourceLineNo">831</span><a name="line.831"></a>
-<span class="sourceLineNo">832</span>  @Override<a name="line.832"></a>
-<span class="sourceLineNo">833</span>  public ServerName getServerWALsBelongTo() {<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    return server.getServerName();<a name="line.834"></a>
-<span class="sourceLineNo">835</span>  }<a name="line.835"></a>
-<span class="sourceLineNo">836</span><a name="line.836"></a>
-<span class="sourceLineNo">837</span>  @Override<a name="line.837"></a>
-<span class="sourceLineNo">838</span>  public ReplicationPeer getPeer() {<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    return replicationPeer;<a name="line.839"></a>
-<span class="sourceLineNo">840</span>  }<a name="line.840"></a>
-<span class="sourceLineNo">841</span><a name="line.841"></a>
-<span class="sourceLineNo">842</span>  Server getServer() {<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    return server;<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>  ReplicationQueueStorage getQueueStorage() {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    return queueStorage;<a name="line.847"></a>
-<span class="sourceLineNo">848</span>  }<a name="line.848"></a>
-<span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>  void removeWorker(ReplicationSourceShipper worker) {<a name="line.850"></a>
-<span class="sourceLineNo">851</span>    workerThreads.remove(worker.walGroupId, worker);<a name="line.851"></a>
-<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
-<span class="sourceLineNo">853</span><a name="line.853"></a>
-<span class="sourceLineNo">854</span>  private String logPeerId(){<a name="line.854"></a>
-<span class="sourceLineNo">855</span>    return "peerId=" + this.getPeerId() + ",";<a name="line.855"></a>
-<span class="sourceLineNo">856</span>  }<a name="line.856"></a>
-<span class="sourceLineNo">857</span>}<a name="line.857"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>    for (ReplicationSourceShipper worker : workers) {<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      worker.stopWorker();<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      if (worker.entryReader != null) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        worker.entryReader.setReaderRunning(false);<a name="line.681"></a>
+<span class="sourceLineNo">682</span>      }<a name="line.682"></a>
+<span class="sourceLineNo">683</span>      if (worker.isAlive() || worker.entryReader.isAlive()) {<a name="line.683"></a>
+<span class="sourceLineNo">684</span>        try {<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          // Wait worker to stop<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          Thread.sleep(this.sleepForRetries);<a name="line.686"></a>
+<span class="sourceLineNo">687</span>        } catch (InterruptedException e) {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>          LOG.info("{} Interrupted while waiting {} to stop", logPeerId(), worker.getName());<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          Thread.currentThread().interrupt();<a name="line.689"></a>
+<span class="sourceLineNo">690</span>        }<a name="line.690"></a>
+<span class="sourceLineNo">691</span>        // If worker still is alive after waiting, interrupt it<a name="line.691"></a>
+<span class="sourceLineNo">692</span>        if (worker.isAlive()) {<a name="line.692"></a>
+<span class="sourceLineNo">693</span>          worker.interrupt();<a name="line.693"></a>
+<span class="sourceLineNo">694</span>        }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>        // If entry reader is alive after waiting, interrupt it<a name="line.695"></a>
+<span class="sourceLineNo">696</span>        if (worker.entryReader.isAlive()) {<a name="line.696"></a>
+<span class="sourceLineNo">697</span>          worker.entryReader.interrupt();<a name="line.697"></a>
+<span class="sourceLineNo">698</span>        }<a name="line.698"></a>
+<span class="sourceLineNo">699</span>      }<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      //If worker is already stopped but there was still entries batched,<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      //we need to clear buffer used for non processed entries<a name="line.701"></a>
+<span class="sourceLineNo">702</span>      worker.clearWALEntryBatch();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>    }<a name="line.703"></a>
+<span class="sourceLineNo">704</span><a name="line.704"></a>
+<span class="sourceLineNo">705</span>    if (this.replicationEndpoint != null) {<a name="line.705"></a>
+<span class="sourceLineNo">706</span>      this.replicationEndpoint.stop();<a name="line.706"></a>
+<span class="sourceLineNo">707</span>    }<a name="line.707"></a>
+<span class="sourceLineNo">708</span>    if (join) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>      for (ReplicationSourceShipper worker : workers) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        Threads.shutdown(worker, this.sleepForRetries);<a name="line.710"></a>
+<span class="sourceLineNo">711</span>        LOG.info("{} ReplicationSourceWorker {} terminated", logPeerId(), worker.getName());<a name="line.711"></a>
+<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
+<span class="sourceLineNo">713</span>      if (this.replicationEndpoint != null) {<a name="line.713"></a>
+<span class="sourceLineNo">714</span>        try {<a name="line.714"></a>
+<span class="sourceLineNo">715</span>          this.replicationEndpoint.awaitTerminated(sleepForRetries * maxRetriesMultiplier,<a name="line.715"></a>
+<span class="sourceLineNo">716</span>            TimeUnit.MILLISECONDS);<a name="line.716"></a>
+<span class="sourceLineNo">717</span>        } catch (TimeoutException te) {<a name="line.717"></a>
+<span class="sourceLineNo">718</span>          LOG.warn("{} Got exception while waiting for endpoint to shutdown "<a name="line.718"></a>
+<span class="sourceLineNo">719</span>            + "for replication source : {}", logPeerId(), this.queueId, te);<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        }<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>    if (clearMetrics) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>      // Can be null in test context.<a name="line.724"></a>
+<span class="sourceLineNo">725</span>      if (this.metrics != null) {<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        this.metrics.clear();<a name="line.726"></a>
+<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
+<span class="sourceLineNo">728</span>    }<a name="line.728"></a>
+<span class="sourceLineNo">729</span>  }<a name="line.729"></a>
+<span class="sourceLineNo">730</span><a name="line.730"></a>
+<span class="sourceLineNo">731</span>  @Override<a name="line.731"></a>
+<span class="sourceLineNo">732</span>  public String getQueueId() {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    return this.queueId;<a name="line.733"></a>
+<span class="sourceLineNo">734</span>  }<a name="line.734"></a>
+<span class="sourceLineNo">735</span><a name="line.735"></a>
+<span class="sourceLineNo">736</span>  @Override<a name="line.736"></a>
+<span class="sourceLineNo">737</span>  public Path getCurrentPath() {<a name="line.737"></a>
+<span class="sourceLineNo">738</span>    // only for testing<a name="line.738"></a>
+<span class="sourceLineNo">739</span>    for (ReplicationSourceShipper worker : workerThreads.values()) {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>      if (worker.getCurrentPath() != null) {<a name="line.740"></a>
+<span class="sourceLineNo">741</span>        return worker.getCurrentPath();<a name="line.741"></a>
+<span class="sourceLineNo">742</span>      }<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    }<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    return null;<a name="line.744"></a>
+<span class="sourceLineNo">745</span>  }<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>  @Override<a name="line.747"></a>
+<span class="sourceLineNo">748</span>  public boolean isSourceActive() {<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    return !this.server.isStopped() &amp;&amp; this.sourceRunning;<a name="line.749"></a>
+<span class="sourceLineNo">750</span>  }<a name="line.750"></a>
+<span class="sourceLineNo">751</span><a name="line.751"></a>
+<span class="sourceLineNo">752</span>  /**<a name="line.752"></a>
+<span class="sourceLineNo">753</span>   * Comparator used to compare logs together based on their start time<a name="line.753"></a>
+<span class="sourceLineNo">754</span>   */<a name="line.754"></a>
+<span class="sourceLineNo">755</span>  public static class LogsComparator implements Comparator&lt;Path&gt; {<a name="line.755"></a>
+<span class="sourceLineNo">756</span><a name="line.756"></a>
+<span class="sourceLineNo">757</span>    @Override<a name="line.757"></a>
+<span class="sourceLineNo">758</span>    public int compare(Path o1, Path o2) {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>      return Long.compare(getTS(o1), getTS(o2));<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    }<a name="line.760"></a>
+<span class="sourceLineNo">761</span><a name="line.761"></a>
+<span class="sourceLineNo">762</span>    /**<a name="line.762"></a>
+<span class="sourceLineNo">763</span>     * &lt;p&gt;<a name="line.763"></a>
+<span class="sourceLineNo">764</span>     * Split a path to get the start time<a name="line.764"></a>
+<span class="sourceLineNo">765</span>     * &lt;/p&gt;<a name="line.765"></a>
+<span class="sourceLineNo">766</span>     * &lt;p&gt;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>     * For example: 10.20.20.171%3A60020.1277499063250<a name="line.767"></a>
+<span class="sourceLineNo">768</span>     * &lt;/p&gt;<a name="line.768"></a>
+<span class="sourceLineNo">769</span>     * @param p path to split<a name="line.769"></a>
+<span class="sourceLineNo">770</span>     * @return start time<a name="line.770"></a>
+<span class="sourceLineNo">771</span>     */<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    private static long getTS(Path p) {<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      return AbstractFSWALProvider.getWALStartTimeFromWALName(p.getName());<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
+<span class="sourceLineNo">775</span>  }<a name="line.775"></a>
+<span class="sourceLineNo">776</span><a name="line.776"></a>
+<span class="sourceLineNo">777</span>  public ReplicationQueueInfo getReplicationQueueInfo() {<a name="line.777"></a>
+<span class="sourceLineNo">778</span>    return replicationQueueInfo;<a name="line.778"></a>
+<span class="sourceLineNo">779</span>  }<a name="line.779"></a>
+<span class="sourceLineNo">780</span><a name="line.780"></a>
+<span class="sourceLineNo">781</span>  public boolean isWorkerRunning(){<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    for(ReplicationSourceShipper worker : this.workerThreads.values()){<a name="line.782"></a>
+<span class="sourceLineNo">783</span>      if(worker.isActive()){<a name="line.783"></a>
+<span class="sourceLineNo">784</span>        return worker.isActive();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>      }<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    }<a name="line.786"></a>
+<span class="sourceLineNo">787</span>    return false;<a name="line.787"></a>
+<span class="sourceLineNo">788</span>  }<a name="line.788"></a>
+<span class="sourceLineNo">789</span><a name="line.789"></a>
+<span class="sourceLineNo">790</span>  @Override<a name="line.790"></a>
+<span class="sourceLineNo">791</span>  public String getStats() {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    StringBuilder sb = new StringBuilder();<a name="line.792"></a>
+<span class="sourceLineNo">793</span>    sb.append("Total replicated edits: ").append(totalReplicatedEdits)<a name="line.793"></a>
+<span class="sourceLineNo">794</span>        .append(", current progress: \n");<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    for (Map.Entry&lt;String, ReplicationSourceShipper&gt; entry : workerThreads.entrySet()) {<a name="line.795"></a>
+<span class="sourceLineNo">796</span>      String walGroupId = entry.getKey();<a name="line.796"></a>
+<span class="sourceLineNo">797</span>      ReplicationSourceShipper worker = entry.getValue();<a name="line.797"></a>
+<span class="sourceLineNo">798</span>      long position = worker.getCurrentPosition();<a name="line.798"></a>
+<span class="sourceLineNo">799</span>      Path currentPath = worker.getCurrentPath();<a name="line.799"></a>
+<span class="sourceLineNo">800</span>      sb.append("walGroup [").append(walGroupId).append("]: ");<a name="line.800"></a>
+<span class="sourceLineNo">801</span>      if (currentPath != null) {<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        sb.append("currently replicating from: ").append(currentPath).append(" at position: ")<a name="line.802"></a>
+<span class="sourceLineNo">803</span>            .append(position).append("\n");<a name="line.803"></a>
+<span class="sourceLineNo">804</span>      } else {<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        sb.append("no replication ongoing, waiting for new log");<a name="line.805"></a>
+<span class="sourceLineNo">806</span>      }<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    }<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    return sb.toString();<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>  @Override<a name="line.811"></a>
+<span class="sourceLineNo">812</span>  public MetricsSource getSourceMetrics() {<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    return this.metrics;<a name="line.813"></a>
+<span class="sourceLineNo">814</span>  }<a name="line.814"></a>
+<span class="sourceLineNo">815</span><a name="line.815"></a>
+<span class="sourceLineNo">816</span>  @Override<a name="line.816"></a>
+<span class="sourceLineNo">817</span>  //offsets totalBufferUsed by deducting shipped batchSize.<a name="line.817"></a>
+<span class="sourceLineNo">818</span>  public void postShipEdits(List&lt;Entry&gt; entries, int batchSize) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>    if (throttler.isEnabled()) {<a name="line.819"></a>
+<span class="sourceLineNo">820</span>      throttler.addPushSize(batchSize);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>    }<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    totalReplicatedEdits.addAndGet(entries.size());<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    long newBufferUsed = totalBufferUsed.addAndGet(-batchSize);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    // Record the new buffer usage<a name="line.824"></a>
+<span class="sourceLineNo">825</span>    this.manager.getGlobalMetrics().setWALReaderEditsBufferBytes(newBufferUsed);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>  }<a name="line.826"></a>
+<span class="sourceLineNo">827</span><a name="line.827"></a>
+<span class="sourceLineNo">828</span>  @Override<a name="line.828"></a>
+<span class="sourceLineNo">829</span>  public WALFileLengthProvider getWALFileLengthProvider() {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>    return walFileLengthProvider;<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>  @Override<a name="line.833"></a>
+<span class="sourceLineNo">834</span>  public ServerName getServerWALsBelongTo() {<a name="line.834"></a>
+<span class="sourceLineNo">835</span>    return server.getServerName();<a name="line.835"></a>
+<span class="sourceLineNo">836</span>  }<a name="line.836"></a>
+<span class="sourceLineNo">837</span><a name="line.837"></a>
+<span class="sourceLineNo">838</span>  @Override<a name="line.838"></a>
+<span class="sourceLineNo">839</span>  public ReplicationPeer getPeer() {<a name="line.839"></a>
+<span class="sourceLineNo">840</span>    return replicationPeer;<a name="line.840"></a>
+<span class="sourceLineNo">841</span>  }<a name="line.841"></a>
+<span class="sourceLineNo">842</span><a name="line.842"></a>
+<span class="sourceLineNo">843</span>  Server getServer() {<a name="line.843"></a>
+<span class="sourceLineNo">844</span>    return server;<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>  ReplicationQueueStorage getQueueStorage() {<a name="line.847"></a>
+<span class="sourceLineNo">848</span>    return queueStorage;<a name="line.848"></a>
+<span class="sourceLineNo">849</span>  }<a name="line.849"></a>
+<span class="sourceLineNo">850</span><a name="line.850"></a>
+<span class="sourceLineNo">851</span>  void removeWorker(ReplicationSourceShipper worker) {<a name="line.851"></a>
+<span class="sourceLineNo">852</span>    workerThreads.remove(worker.walGroupId, worker);<a name="line.852"></a>
+<span class="sourceLineNo">853</span>  }<a name="line.853"></a>
+<span class="sourceLineNo">854</span><a name="line.854"></a>
+<span class="sourceLineNo">855</span>  private String logPeerId(){<a name="line.855"></a>
+<span class="sourceLineNo">856</span>    return "peerId=" + this.getPeerId() + ",";<a name="line.856"></a>
+<span class="sourceLineNo">857</span>  }<a name="line.857"></a>
+<span class="sourceLineNo">858</span>}<a name="line.858"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
index cb0d8a4..c342c9c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html
@@ -31,309 +31,360 @@
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.Path;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.Cell;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<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> * This thread reads entries from a queue and ships them. Entries are placed onto the queue by<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * ReplicationSourceWALReaderThread<a name="line.44"></a>
-<span class="sourceLineNo">045</span> */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public class ReplicationSourceShipper extends Thread {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceShipper.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  // Hold the state of a replication worker thread<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  public enum WorkerState {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    RUNNING,<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    STOPPED,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    FINISHED,  // The worker is done processing a queue<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private final Configuration conf;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  protected final String walGroupId;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  protected final PriorityBlockingQueue&lt;Path&gt; queue;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private final ReplicationSource source;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  // Last position in the log that we sent to ZooKeeper<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  // It will be accessed by the stats thread so make it volatile<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private volatile long currentPosition = -1;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  // Path of the current log<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private Path currentPath;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  // Current state of the worker thread<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private volatile WorkerState state;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  protected ReplicationSourceWALReader entryReader;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  // How long should we sleep for each retry<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  protected final long sleepForRetries;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // Maximum number of retries before taking bold actions<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  protected final int maxRetriesMultiplier;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final int DEFAULT_TIMEOUT = 20000;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final int getEntriesTimeout;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private final int shipEditsTimeout;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public ReplicationSourceShipper(Configuration conf, String walGroupId,<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      PriorityBlockingQueue&lt;Path&gt; queue, ReplicationSource source) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    this.conf = conf;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.walGroupId = walGroupId;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    this.queue = queue;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    this.source = source;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.sleepForRetries =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    this.maxRetriesMultiplier =<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    this.getEntriesTimeout =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        this.conf.getInt("replication.source.getEntries.timeout", DEFAULT_TIMEOUT); // 20 seconds<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    this.shipEditsTimeout = this.conf.getInt(HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>        HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  @Override<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public final void run() {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    setWorkerState(WorkerState.RUNNING);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    LOG.info("Running ReplicationSourceShipper Thread for wal group: {}", this.walGroupId);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    // Loop until we close down<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    while (isActive()) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      // Sleep until replication is enabled again<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      if (!source.isPeerEnabled()) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        // The peer enabled check is in memory, not expensive, so do not need to increase the<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        // sleep interval as it may cause a long lag when we enable the peer.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        sleepForRetries("Replication is disabled", sleepForRetries, 1, maxRetriesMultiplier);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        continue;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      try {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        WALEntryBatch entryBatch = entryReader.poll(getEntriesTimeout);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        LOG.debug("Shipper from source {} got entry batch from reader: {}",<a name="line.110"></a>
-<span class="sourceLineNo">111</span>            source.getQueueId(), entryBatch);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        if (entryBatch == null) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          continue;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        // the NO_MORE_DATA instance has no path so do not call shipEdits<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        if (entryBatch == WALEntryBatch.NO_MORE_DATA) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>          noMoreData();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        } else {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>          shipEdits(entryBatch);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      } catch (InterruptedException | ReplicationRuntimeException e) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        // It is interrupted and needs to quit.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        LOG.warn("Interrupted while waiting for next replication entry batch", e);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        Thread.currentThread().interrupt();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    // If the worker exits run loop without finishing its task, mark it as stopped.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (!isFinished()) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      setWorkerState(WorkerState.STOPPED);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    } else {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      source.removeWorker(this);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      postFinish();<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 void noMoreData() {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    if (source.isRecovered()) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.debug("Finished recovering queue for group {} of peer {}", walGroupId,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        source.getQueueId());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      source.getSourceMetrics().incrCompletedRecoveryQueue();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    } else {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      LOG.debug("Finished queue for group {} of peer {}", walGroupId, source.getQueueId());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    setWorkerState(WorkerState.FINISHED);<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>  // To be implemented by recovered shipper<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  protected void postFinish() {<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>  /**<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * get batchEntry size excludes bulk load file sizes.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * Uses ReplicationSourceWALReader's static method.<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private int getBatchEntrySizeExcludeBulkLoad(WALEntryBatch entryBatch) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    int totalSize = 0;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    for(Entry entry : entryBatch.getWalEntries()) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      totalSize += ReplicationSourceWALReader.getEntrySizeExcludeBulkLoad(entry);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    return  totalSize;<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>   * Do the shipping logic<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    int sleepMultiplier = 0;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (entries.isEmpty()) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      updateLogPosition(entryBatch);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int sizeExcludeBulkLoad = getBatchEntrySizeExcludeBulkLoad(entryBatch);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    source.getSourceMetrics().setTimeStampNextToReplicate(entries.get(entries.size() - 1)<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        .getKey().getWriteTime());<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    while (isActive()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      try {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          source.tryThrottle(currentSize);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        } catch (InterruptedException e) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          Thread.currentThread().interrupt();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          // current thread might be interrupted to terminate<a name="line.184"></a>
-<span class="sourceLineNo">185</span>          // directly go back to while() for confirm this<a name="line.185"></a>
-<span class="sourceLineNo">186</span>          continue;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        // stack<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.190"></a>
-<span class="sourceLineNo">191</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        replicateContext.setTimeout(getAdaptiveTimeout(this.shipEditsTimeout, sleepMultiplier));<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>        long startTimeNs = System.nanoTime();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        long endTimeNs = System.nanoTime();<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>        if (!replicated) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>          continue;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        // Clean up hfile references<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        for (Entry entry : entries) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          LOG.trace("shipped entry {}: ", entry);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        // Log and clean up WAL logs<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        updateLogPosition(entryBatch);<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>        //offsets totalBufferUsed by deducting shipped batchSize (excludes bulk load size)<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        //this sizeExcludeBulkLoad has to use same calculation that when calling<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        //acquireBufferQuota() in ReplicationSourceWALReader because they maintain<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        //same variable: totalBufferUsed<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        source.postShipEdits(entries, sizeExcludeBulkLoad);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        // FIXME check relationship between wal group and overall<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          entryBatch.getNbHFiles());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        source.getSourceMetrics().updateTableLevelMetrics(entryBatch.getWalEntriesWithSize());<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        if (LOG.isTraceEnabled()) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          LOG.debug("Replicated {} entries or {} operations in {} ms",<a name="line.227"></a>
-<span class="sourceLineNo">228</span>              entries.size(), entryBatch.getNbOperations(), (endTimeNs - startTimeNs) / 1000000);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        break;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      } catch (Exception ex) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        LOG.warn("{} threw unknown exception:",<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepForRetries, sleepMultiplier,<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          maxRetriesMultiplier)) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          sleepMultiplier++;<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>    }<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>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    String peerId = source.getPeerId();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    if (peerId.contains("-")) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      peerId = peerId.split("-")[0];<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    int totalCells = cells.size();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      Cell cell = cells.get(i);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        int totalStores = stores.size();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    boolean updated = false;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      source.getSourceManager().logPositionAndCleanOldLogs(source, batch);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      updated = true;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // no more files so here the currentPath may be null.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    if (batch.isEndOfFile()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      currentPath = entryReader.getCurrentPath();<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      currentPosition = 0L;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    } else {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      currentPath = batch.getLastWalPath();<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      currentPosition = batch.getLastWalPosition();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    return updated;<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>  public void startup(UncaughtExceptionHandler handler) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    String name = Thread.currentThread().getName();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Threads.setDaemonThreadRunning(this,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(),<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      handler::uncaughtException);<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>  Path getCurrentPath() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return entryReader.getCurrentPath();<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>  long getCurrentPosition() {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return currentPosition;<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>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this.entryReader = entryReader;<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>  long getStartPosition() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return 0;<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 boolean isActive() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<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>  protected final void setWorkerState(WorkerState state) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    this.state = state;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  void stopWorker() {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    setWorkerState(WorkerState.STOPPED);<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>  public boolean isFinished() {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    return state == WorkerState.FINISHED;<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">026</span>import java.util.concurrent.atomic.LongAccumulator;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.Cell;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HConstants;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.slf4j.Logger;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.LoggerFactory;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * This thread reads entries from a queue and ships them. Entries are placed onto the queue by<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * ReplicationSourceWALReaderThread<a name="line.46"></a>
+<span class="sourceLineNo">047</span> */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
+<span class="sourceLineNo">049</span>public class ReplicationSourceShipper extends Thread {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceShipper.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  // Hold the state of a replication worker thread<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public enum WorkerState {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    RUNNING,<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    STOPPED,<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    FINISHED,  // The worker is done processing a queue<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>  private final Configuration conf;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  protected final String walGroupId;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  protected final PriorityBlockingQueue&lt;Path&gt; queue;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private final ReplicationSource source;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  // Last position in the log that we sent to ZooKeeper<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  // It will be accessed by the stats thread so make it volatile<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private volatile long currentPosition = -1;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  // Path of the current log<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private Path currentPath;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  // Current state of the worker thread<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private volatile WorkerState state;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  protected ReplicationSourceWALReader entryReader;<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  // How long should we sleep for each retry<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  protected final long sleepForRetries;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  // Maximum number of retries before taking bold actions<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  protected final int maxRetriesMultiplier;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private final int DEFAULT_TIMEOUT = 20000;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final int getEntriesTimeout;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private final int shipEditsTimeout;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public ReplicationSourceShipper(Configuration conf, String walGroupId,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      PriorityBlockingQueue&lt;Path&gt; queue, ReplicationSource source) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.conf = conf;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    this.walGroupId = walGroupId;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    this.queue = queue;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    this.source = source;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    this.sleepForRetries =<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    this.maxRetriesMultiplier =<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    this.getEntriesTimeout =<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        this.conf.getInt("replication.source.getEntries.timeout", DEFAULT_TIMEOUT); // 20 seconds<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    this.shipEditsTimeout = this.conf.getInt(HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public final void run() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    setWorkerState(WorkerState.RUNNING);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    LOG.info("Running ReplicationSourceShipper Thread for wal group: {}", this.walGroupId);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    // Loop until we close down<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    while (isActive()) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      // Sleep until replication is enabled again<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      if (!source.isPeerEnabled()) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        // The peer enabled check is in memory, not expensive, so do not need to increase the<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        // sleep interval as it may cause a long lag when we enable the peer.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        sleepForRetries("Replication is disabled", sleepForRetries, 1, maxRetriesMultiplier);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        continue;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      try {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        WALEntryBatch entryBatch = entryReader.poll(getEntriesTimeout);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        LOG.debug("Shipper from source {} got entry batch from reader: {}",<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            source.getQueueId(), entryBatch);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        if (entryBatch == null) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          continue;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        // the NO_MORE_DATA instance has no path so do not call shipEdits<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        if (entryBatch == WALEntryBatch.NO_MORE_DATA) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>          noMoreData();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        } else {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>          shipEdits(entryBatch);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      } catch (InterruptedException | ReplicationRuntimeException e) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        // It is interrupted and needs to quit.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        LOG.warn("Interrupted while waiting for next replication entry batch", e);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        Thread.currentThread().interrupt();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    // If the worker exits run loop without finishing its task, mark it as stopped.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    if (!isFinished()) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      setWorkerState(WorkerState.STOPPED);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    } else {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      source.removeWorker(this);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      postFinish();<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>  private void noMoreData() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    if (source.isRecovered()) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      LOG.debug("Finished recovering queue for group {} of peer {}", walGroupId,<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        source.getQueueId());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      source.getSourceMetrics().incrCompletedRecoveryQueue();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    } else {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      LOG.debug("Finished queue for group {} of peer {}", walGroupId, source.getQueueId());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    setWorkerState(WorkerState.FINISHED);<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>  // To be implemented by recovered shipper<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  protected void postFinish() {<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 batchEntry size excludes bulk load file sizes.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * Uses ReplicationSourceWALReader's static method.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  private int getBatchEntrySizeExcludeBulkLoad(WALEntryBatch entryBatch) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    int totalSize = 0;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    for(Entry entry : entryBatch.getWalEntries()) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      totalSize += ReplicationSourceWALReader.getEntrySizeExcludeBulkLoad(entry);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    return  totalSize;<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>  /**<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * Do the shipping logic<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    int sleepMultiplier = 0;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    if (entries.isEmpty()) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      updateLogPosition(entryBatch);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      return;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int sizeExcludeBulkLoad = getBatchEntrySizeExcludeBulkLoad(entryBatch);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    source.getSourceMetrics().setTimeStampNextToReplicate(entries.get(entries.size() - 1)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        .getKey().getWriteTime());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    while (isActive()) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      try {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        try {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          source.tryThrottle(currentSize);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        } catch (InterruptedException e) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          Thread.currentThread().interrupt();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>          // current thread might be interrupted to terminate<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          // directly go back to while() for confirm this<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          continue;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        // stack<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.192"></a>
+<span class="sourceLineNo">193</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        replicateContext.setTimeout(getAdaptiveTimeout(this.shipEditsTimeout, sleepMultiplier));<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>        long startTimeNs = System.nanoTime();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        long endTimeNs = System.nanoTime();<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>        if (!replicated) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          continue;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        // Clean up hfile references<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        for (Entry entry : entries) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          LOG.trace("shipped entry {}: ", entry);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        // Log and clean up WAL logs<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        updateLogPosition(entryBatch);<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>        //offsets totalBufferUsed by deducting shipped batchSize (excludes bulk load size)<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        //this sizeExcludeBulkLoad has to use same calculation that when calling<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        //acquireBufferQuota() in ReplicationSourceWALReader because they maintain<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        //same variable: totalBufferUsed<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        source.postShipEdits(entries, sizeExcludeBulkLoad);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        // FIXME check relationship between wal group and overall<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          entryBatch.getNbHFiles());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        source.getSourceMetrics().updateTableLevelMetrics(entryBatch.getWalEntriesWithSize());<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>        if (LOG.isTraceEnabled()) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          LOG.debug("Replicated {} entries or {} operations in {} ms",<a name="line.229"></a>
+<span class="sourceLineNo">230</span>              entries.size(), entryBatch.getNbOperations(), (endTimeNs - startTimeNs) / 1000000);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        break;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (Exception ex) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.warn("{} threw unknown exception:",<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepForRetries, sleepMultiplier,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          maxRetriesMultiplier)) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          sleepMultiplier++;<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>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    String peerId = source.getPeerId();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (peerId.contains("-")) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      peerId = peerId.split("-")[0];<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    int totalCells = cells.size();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      Cell cell = cells.get(i);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        int totalStores = stores.size();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<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>  }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    boolean updated = false;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      source.getSourceManager().logPositionAndCleanOldLogs(source, batch);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      updated = true;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // no more files so here the currentPath may be null.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (batch.isEndOfFile()) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      currentPath = entryReader.getCurrentPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      currentPosition = 0L;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } else {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      currentPath = batch.getLastWalPath();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      currentPosition = batch.getLastWalPosition();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return updated;<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>  public void startup(UncaughtExceptionHandler handler) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    String name = Thread.currentThread().getName();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    Threads.setDaemonThreadRunning(this,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(),<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      handler::uncaughtException);<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>  Path getCurrentPath() {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return entryReader.getCurrentPath();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  long getCurrentPosition() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    return currentPosition;<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>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    this.entryReader = entryReader;<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>  long getStartPosition() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    return 0;<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>  protected boolean isActive() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<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>  protected final void setWorkerState(WorkerState state) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    this.state = state;<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>  void stopWorker() {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    setWorkerState(WorkerState.STOPPED);<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>  public boolean isFinished() {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return state == WorkerState.FINISHED;<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>   * Attempts to properly update &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;,<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * in case there were unprocessed entries batched by the reader to the shipper,<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * but the shipper didn't manage to ship those because the replication source is being terminated.<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * In that case, it iterates through the batched entries and decrease the pending<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * entries size from &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * &lt;p/&gt;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * &lt;b&gt;NOTES&lt;/b&gt;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * 1) This method should only be called upon replication source termination.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * It blocks waiting for both shipper and reader threads termination,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * to make sure no race conditions<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * when updating &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   *<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * 2) It &lt;b&gt;does not&lt;/b&gt; attempt to terminate reader and shipper threads. Those &lt;b&gt;must&lt;/b&gt;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * have been triggered interruption/termination prior to calling this method.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  void clearWALEntryBatch() {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    long timeout = System.currentTimeMillis() + this.shipEditsTimeout;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    while(this.isAlive() || this.entryReader.isAlive()){<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        if (System.currentTimeMillis() &gt;= timeout) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          LOG.warn("Interrupting source thread for peer {} without cleaning buffer usage "<a name="line.352"></a>
+<span class="sourceLineNo">353</span>            + "because clearWALEntryBatch method timed out whilst waiting reader/shipper "<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            + "thread to stop.", this.source.getPeerId());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          Thread.currentThread().interrupt();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        } else {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          // Wait both shipper and reader threads to stop<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          Thread.sleep(this.sleepForRetries);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      } catch (InterruptedException e) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        LOG.warn("{} Interrupted while waiting {} to stop on clearWALEntryBatch: {}",<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          this.source.getPeerId(), this.getName(), e);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        Thread.currentThread().interrupt();<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>    LongAccumulator totalToDecrement = new LongAccumulator((a,b) -&gt; a + b, 0);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    entryReader.entryBatchQueue.forEach(w -&gt; {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      entryReader.entryBatchQueue.remove(w);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      w.getWalEntries().forEach(e -&gt; {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        long entrySizeExcludeBulkLoad = entryReader.getEntrySizeExcludeBulkLoad(e);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        totalToDecrement.accumulate(entrySizeExcludeBulkLoad);<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>    LOG.trace("Decrementing totalBufferUsed by {}B while stopping Replication WAL Readers.",<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      totalToDecrement.longValue());<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    source.getSourceManager().getTotalBufferUsed().addAndGet(-totalToDecrement.longValue());<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>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
index cb0d8a4..c342c9c 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.html
@@ -31,309 +31,360 @@
 <span class="sourceLineNo">023</span>import java.io.IOException;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import java.util.List;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.conf.Configuration;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.fs.Path;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.Cell;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.HConstants;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.slf4j.Logger;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.slf4j.LoggerFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<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> * This thread reads entries from a queue and ships them. Entries are placed onto the queue by<a name="line.43"></a>
-<span class="sourceLineNo">044</span> * ReplicationSourceWALReaderThread<a name="line.44"></a>
-<span class="sourceLineNo">045</span> */<a name="line.45"></a>
-<span class="sourceLineNo">046</span>@InterfaceAudience.Private<a name="line.46"></a>
-<span class="sourceLineNo">047</span>public class ReplicationSourceShipper extends Thread {<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceShipper.class);<a name="line.48"></a>
-<span class="sourceLineNo">049</span><a name="line.49"></a>
-<span class="sourceLineNo">050</span>  // Hold the state of a replication worker thread<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  public enum WorkerState {<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    RUNNING,<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    STOPPED,<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    FINISHED,  // The worker is done processing a queue<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  }<a name="line.55"></a>
-<span class="sourceLineNo">056</span><a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private final Configuration conf;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  protected final String walGroupId;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  protected final PriorityBlockingQueue&lt;Path&gt; queue;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>  private final ReplicationSource source;<a name="line.60"></a>
-<span class="sourceLineNo">061</span><a name="line.61"></a>
-<span class="sourceLineNo">062</span>  // Last position in the log that we sent to ZooKeeper<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  // It will be accessed by the stats thread so make it volatile<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private volatile long currentPosition = -1;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  // Path of the current log<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private Path currentPath;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  // Current state of the worker thread<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private volatile WorkerState state;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  protected ReplicationSourceWALReader entryReader;<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  // How long should we sleep for each retry<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  protected final long sleepForRetries;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  // Maximum number of retries before taking bold actions<a name="line.73"></a>
-<span class="sourceLineNo">074</span>  protected final int maxRetriesMultiplier;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private final int DEFAULT_TIMEOUT = 20000;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>  private final int getEntriesTimeout;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private final int shipEditsTimeout;<a name="line.77"></a>
-<span class="sourceLineNo">078</span><a name="line.78"></a>
-<span class="sourceLineNo">079</span>  public ReplicationSourceShipper(Configuration conf, String walGroupId,<a name="line.79"></a>
-<span class="sourceLineNo">080</span>      PriorityBlockingQueue&lt;Path&gt; queue, ReplicationSource source) {<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    this.conf = conf;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    this.walGroupId = walGroupId;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>    this.queue = queue;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    this.source = source;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    this.sleepForRetries =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    this.maxRetriesMultiplier =<a name="line.87"></a>
-<span class="sourceLineNo">088</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    this.getEntriesTimeout =<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        this.conf.getInt("replication.source.getEntries.timeout", DEFAULT_TIMEOUT); // 20 seconds<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    this.shipEditsTimeout = this.conf.getInt(HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>        HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT);<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
-<span class="sourceLineNo">094</span><a name="line.94"></a>
-<span class="sourceLineNo">095</span>  @Override<a name="line.95"></a>
-<span class="sourceLineNo">096</span>  public final void run() {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    setWorkerState(WorkerState.RUNNING);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    LOG.info("Running ReplicationSourceShipper Thread for wal group: {}", this.walGroupId);<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    // Loop until we close down<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    while (isActive()) {<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      // Sleep until replication is enabled again<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      if (!source.isPeerEnabled()) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        // The peer enabled check is in memory, not expensive, so do not need to increase the<a name="line.103"></a>
-<span class="sourceLineNo">104</span>        // sleep interval as it may cause a long lag when we enable the peer.<a name="line.104"></a>
-<span class="sourceLineNo">105</span>        sleepForRetries("Replication is disabled", sleepForRetries, 1, maxRetriesMultiplier);<a name="line.105"></a>
-<span class="sourceLineNo">106</span>        continue;<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      }<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      try {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>        WALEntryBatch entryBatch = entryReader.poll(getEntriesTimeout);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        LOG.debug("Shipper from source {} got entry batch from reader: {}",<a name="line.110"></a>
-<span class="sourceLineNo">111</span>            source.getQueueId(), entryBatch);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>        if (entryBatch == null) {<a name="line.112"></a>
-<span class="sourceLineNo">113</span>          continue;<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        // the NO_MORE_DATA instance has no path so do not call shipEdits<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        if (entryBatch == WALEntryBatch.NO_MORE_DATA) {<a name="line.116"></a>
-<span class="sourceLineNo">117</span>          noMoreData();<a name="line.117"></a>
-<span class="sourceLineNo">118</span>        } else {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>          shipEdits(entryBatch);<a name="line.119"></a>
-<span class="sourceLineNo">120</span>        }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>      } catch (InterruptedException | ReplicationRuntimeException e) {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>        // It is interrupted and needs to quit.<a name="line.122"></a>
-<span class="sourceLineNo">123</span>        LOG.warn("Interrupted while waiting for next replication entry batch", e);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>        Thread.currentThread().interrupt();<a name="line.124"></a>
-<span class="sourceLineNo">125</span>      }<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    }<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    // If the worker exits run loop without finishing its task, mark it as stopped.<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    if (!isFinished()) {<a name="line.128"></a>
-<span class="sourceLineNo">129</span>      setWorkerState(WorkerState.STOPPED);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    } else {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      source.removeWorker(this);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      postFinish();<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 void noMoreData() {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    if (source.isRecovered()) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      LOG.debug("Finished recovering queue for group {} of peer {}", walGroupId,<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        source.getQueueId());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      source.getSourceMetrics().incrCompletedRecoveryQueue();<a name="line.140"></a>
-<span class="sourceLineNo">141</span>    } else {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      LOG.debug("Finished queue for group {} of peer {}", walGroupId, source.getQueueId());<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    setWorkerState(WorkerState.FINISHED);<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>  // To be implemented by recovered shipper<a name="line.147"></a>
-<span class="sourceLineNo">148</span>  protected void postFinish() {<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>  /**<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * get batchEntry size excludes bulk load file sizes.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * Uses ReplicationSourceWALReader's static method.<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
-<span class="sourceLineNo">155</span>  private int getBatchEntrySizeExcludeBulkLoad(WALEntryBatch entryBatch) {<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    int totalSize = 0;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    for(Entry entry : entryBatch.getWalEntries()) {<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      totalSize += ReplicationSourceWALReader.getEntrySizeExcludeBulkLoad(entry);<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    return  totalSize;<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>   * Do the shipping logic<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    int sleepMultiplier = 0;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    if (entries.isEmpty()) {<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      updateLogPosition(entryBatch);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    int sizeExcludeBulkLoad = getBatchEntrySizeExcludeBulkLoad(entryBatch);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    source.getSourceMetrics().setTimeStampNextToReplicate(entries.get(entries.size() - 1)<a name="line.175"></a>
-<span class="sourceLineNo">176</span>        .getKey().getWriteTime());<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    while (isActive()) {<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      try {<a name="line.178"></a>
-<span class="sourceLineNo">179</span>        try {<a name="line.179"></a>
-<span class="sourceLineNo">180</span>          source.tryThrottle(currentSize);<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        } catch (InterruptedException e) {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.182"></a>
-<span class="sourceLineNo">183</span>          Thread.currentThread().interrupt();<a name="line.183"></a>
-<span class="sourceLineNo">184</span>          // current thread might be interrupted to terminate<a name="line.184"></a>
-<span class="sourceLineNo">185</span>          // directly go back to while() for confirm this<a name="line.185"></a>
-<span class="sourceLineNo">186</span>          continue;<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        }<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.188"></a>
-<span class="sourceLineNo">189</span>        // stack<a name="line.189"></a>
-<span class="sourceLineNo">190</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.190"></a>
-<span class="sourceLineNo">191</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.191"></a>
-<span class="sourceLineNo">192</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        replicateContext.setTimeout(getAdaptiveTimeout(this.shipEditsTimeout, sleepMultiplier));<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>        long startTimeNs = System.nanoTime();<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        long endTimeNs = System.nanoTime();<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>        if (!replicated) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>          continue;<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        } else {<a name="line.203"></a>
-<span class="sourceLineNo">204</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.204"></a>
-<span class="sourceLineNo">205</span>        }<a name="line.205"></a>
-<span class="sourceLineNo">206</span>        // Clean up hfile references<a name="line.206"></a>
-<span class="sourceLineNo">207</span>        for (Entry entry : entries) {<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.208"></a>
-<span class="sourceLineNo">209</span>          LOG.trace("shipped entry {}: ", entry);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>        }<a name="line.210"></a>
-<span class="sourceLineNo">211</span>        // Log and clean up WAL logs<a name="line.211"></a>
-<span class="sourceLineNo">212</span>        updateLogPosition(entryBatch);<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>        //offsets totalBufferUsed by deducting shipped batchSize (excludes bulk load size)<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        //this sizeExcludeBulkLoad has to use same calculation that when calling<a name="line.215"></a>
-<span class="sourceLineNo">216</span>        //acquireBufferQuota() in ReplicationSourceWALReader because they maintain<a name="line.216"></a>
-<span class="sourceLineNo">217</span>        //same variable: totalBufferUsed<a name="line.217"></a>
-<span class="sourceLineNo">218</span>        source.postShipEdits(entries, sizeExcludeBulkLoad);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>        // FIXME check relationship between wal group and overall<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.220"></a>
-<span class="sourceLineNo">221</span>          entryBatch.getNbHFiles());<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.222"></a>
-<span class="sourceLineNo">223</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        source.getSourceMetrics().updateTableLevelMetrics(entryBatch.getWalEntriesWithSize());<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        if (LOG.isTraceEnabled()) {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>          LOG.debug("Replicated {} entries or {} operations in {} ms",<a name="line.227"></a>
-<span class="sourceLineNo">228</span>              entries.size(), entryBatch.getNbOperations(), (endTimeNs - startTimeNs) / 1000000);<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        }<a name="line.229"></a>
-<span class="sourceLineNo">230</span>        break;<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      } catch (Exception ex) {<a name="line.231"></a>
-<span class="sourceLineNo">232</span>        LOG.warn("{} threw unknown exception:",<a name="line.232"></a>
-<span class="sourceLineNo">233</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepForRetries, sleepMultiplier,<a name="line.234"></a>
-<span class="sourceLineNo">235</span>          maxRetriesMultiplier)) {<a name="line.235"></a>
-<span class="sourceLineNo">236</span>          sleepMultiplier++;<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>    }<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>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.242"></a>
-<span class="sourceLineNo">243</span>    String peerId = source.getPeerId();<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    if (peerId.contains("-")) {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.246"></a>
-<span class="sourceLineNo">247</span>      peerId = peerId.split("-")[0];<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    int totalCells = cells.size();<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      Cell cell = cells.get(i);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        int totalStores = stores.size();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.258"></a>
-<span class="sourceLineNo">259</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        }<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  }<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    boolean updated = false;<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.272"></a>
-<span class="sourceLineNo">273</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      source.getSourceManager().logPositionAndCleanOldLogs(source, batch);<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      updated = true;<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    }<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.278"></a>
-<span class="sourceLineNo">279</span>    // no more files so here the currentPath may be null.<a name="line.279"></a>
-<span class="sourceLineNo">280</span>    if (batch.isEndOfFile()) {<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      currentPath = entryReader.getCurrentPath();<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      currentPosition = 0L;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    } else {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      currentPath = batch.getLastWalPath();<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      currentPosition = batch.getLastWalPosition();<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    }<a name="line.286"></a>
-<span class="sourceLineNo">287</span>    return updated;<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>  public void startup(UncaughtExceptionHandler handler) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    String name = Thread.currentThread().getName();<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    Threads.setDaemonThreadRunning(this,<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(),<a name="line.293"></a>
-<span class="sourceLineNo">294</span>      handler::uncaughtException);<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>  Path getCurrentPath() {<a name="line.297"></a>
-<span class="sourceLineNo">298</span>    return entryReader.getCurrentPath();<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>  long getCurrentPosition() {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    return currentPosition;<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>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    this.entryReader = entryReader;<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>  long getStartPosition() {<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    return 0;<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 boolean isActive() {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<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>  protected final void setWorkerState(WorkerState state) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    this.state = state;<a name="line.318"></a>
-<span class="sourceLineNo">319</span>  }<a name="line.319"></a>
-<span class="sourceLineNo">320</span><a name="line.320"></a>
-<span class="sourceLineNo">321</span>  void stopWorker() {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    setWorkerState(WorkerState.STOPPED);<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>  public boolean isFinished() {<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    return state == WorkerState.FINISHED;<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">026</span>import java.util.concurrent.atomic.LongAccumulator;<a name="line.26"></a>
+<span class="sourceLineNo">027</span><a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.conf.Configuration;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.fs.Path;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.Cell;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.CellUtil;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.HConstants;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.Threads;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.wal.WAL.Entry;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.slf4j.Logger;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.slf4j.LoggerFactory;<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.StoreDescriptor;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>/**<a name="line.44"></a>
+<span class="sourceLineNo">045</span> * This thread reads entries from a queue and ships them. Entries are placed onto the queue by<a name="line.45"></a>
+<span class="sourceLineNo">046</span> * ReplicationSourceWALReaderThread<a name="line.46"></a>
+<span class="sourceLineNo">047</span> */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>@InterfaceAudience.Private<a name="line.48"></a>
+<span class="sourceLineNo">049</span>public class ReplicationSourceShipper extends Thread {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static final Logger LOG = LoggerFactory.getLogger(ReplicationSourceShipper.class);<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  // Hold the state of a replication worker thread<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  public enum WorkerState {<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    RUNNING,<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    STOPPED,<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    FINISHED,  // The worker is done processing a queue<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>  private final Configuration conf;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  protected final String walGroupId;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>  protected final PriorityBlockingQueue&lt;Path&gt; queue;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  private final ReplicationSource source;<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  // Last position in the log that we sent to ZooKeeper<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  // It will be accessed by the stats thread so make it volatile<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private volatile long currentPosition = -1;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  // Path of the current log<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private Path currentPath;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  // Current state of the worker thread<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private volatile WorkerState state;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  protected ReplicationSourceWALReader entryReader;<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  // How long should we sleep for each retry<a name="line.73"></a>
+<span class="sourceLineNo">074</span>  protected final long sleepForRetries;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>  // Maximum number of retries before taking bold actions<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  protected final int maxRetriesMultiplier;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>  private final int DEFAULT_TIMEOUT = 20000;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private final int getEntriesTimeout;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private final int shipEditsTimeout;<a name="line.79"></a>
+<span class="sourceLineNo">080</span><a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public ReplicationSourceShipper(Configuration conf, String walGroupId,<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      PriorityBlockingQueue&lt;Path&gt; queue, ReplicationSource source) {<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    this.conf = conf;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    this.walGroupId = walGroupId;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    this.queue = queue;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    this.source = source;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    this.sleepForRetries =<a name="line.87"></a>
+<span class="sourceLineNo">088</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    this.maxRetriesMultiplier =<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    this.getEntriesTimeout =<a name="line.91"></a>
+<span class="sourceLineNo">092</span>        this.conf.getInt("replication.source.getEntries.timeout", DEFAULT_TIMEOUT); // 20 seconds<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    this.shipEditsTimeout = this.conf.getInt(HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT,<a name="line.93"></a>
+<span class="sourceLineNo">094</span>        HConstants.REPLICATION_SOURCE_SHIPEDITS_TIMEOUT_DFAULT);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>  @Override<a name="line.97"></a>
+<span class="sourceLineNo">098</span>  public final void run() {<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    setWorkerState(WorkerState.RUNNING);<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    LOG.info("Running ReplicationSourceShipper Thread for wal group: {}", this.walGroupId);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    // Loop until we close down<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    while (isActive()) {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      // Sleep until replication is enabled again<a name="line.103"></a>
+<span class="sourceLineNo">104</span>      if (!source.isPeerEnabled()) {<a name="line.104"></a>
+<span class="sourceLineNo">105</span>        // The peer enabled check is in memory, not expensive, so do not need to increase the<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        // sleep interval as it may cause a long lag when we enable the peer.<a name="line.106"></a>
+<span class="sourceLineNo">107</span>        sleepForRetries("Replication is disabled", sleepForRetries, 1, maxRetriesMultiplier);<a name="line.107"></a>
+<span class="sourceLineNo">108</span>        continue;<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      }<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      try {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        WALEntryBatch entryBatch = entryReader.poll(getEntriesTimeout);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>        LOG.debug("Shipper from source {} got entry batch from reader: {}",<a name="line.112"></a>
+<span class="sourceLineNo">113</span>            source.getQueueId(), entryBatch);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        if (entryBatch == null) {<a name="line.114"></a>
+<span class="sourceLineNo">115</span>          continue;<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        }<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        // the NO_MORE_DATA instance has no path so do not call shipEdits<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        if (entryBatch == WALEntryBatch.NO_MORE_DATA) {<a name="line.118"></a>
+<span class="sourceLineNo">119</span>          noMoreData();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>        } else {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>          shipEdits(entryBatch);<a name="line.121"></a>
+<span class="sourceLineNo">122</span>        }<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      } catch (InterruptedException | ReplicationRuntimeException e) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>        // It is interrupted and needs to quit.<a name="line.124"></a>
+<span class="sourceLineNo">125</span>        LOG.warn("Interrupted while waiting for next replication entry batch", e);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>        Thread.currentThread().interrupt();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      }<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    }<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    // If the worker exits run loop without finishing its task, mark it as stopped.<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    if (!isFinished()) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>      setWorkerState(WorkerState.STOPPED);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    } else {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      source.removeWorker(this);<a name="line.133"></a>
+<span class="sourceLineNo">134</span>      postFinish();<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>  private void noMoreData() {<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    if (source.isRecovered()) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      LOG.debug("Finished recovering queue for group {} of peer {}", walGroupId,<a name="line.140"></a>
+<span class="sourceLineNo">141</span>        source.getQueueId());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      source.getSourceMetrics().incrCompletedRecoveryQueue();<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    } else {<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      LOG.debug("Finished queue for group {} of peer {}", walGroupId, source.getQueueId());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    }<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    setWorkerState(WorkerState.FINISHED);<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>  // To be implemented by recovered shipper<a name="line.149"></a>
+<span class="sourceLineNo">150</span>  protected void postFinish() {<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 batchEntry size excludes bulk load file sizes.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * Uses ReplicationSourceWALReader's static method.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  private int getBatchEntrySizeExcludeBulkLoad(WALEntryBatch entryBatch) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    int totalSize = 0;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    for(Entry entry : entryBatch.getWalEntries()) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>      totalSize += ReplicationSourceWALReader.getEntrySizeExcludeBulkLoad(entry);<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    }<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    return  totalSize;<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>  /**<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * Do the shipping logic<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   */<a name="line.167"></a>
+<span class="sourceLineNo">168</span>  private void shipEdits(WALEntryBatch entryBatch) {<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    List&lt;Entry&gt; entries = entryBatch.getWalEntries();<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    int sleepMultiplier = 0;<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    if (entries.isEmpty()) {<a name="line.171"></a>
+<span class="sourceLineNo">172</span>      updateLogPosition(entryBatch);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>      return;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    }<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    int currentSize = (int) entryBatch.getHeapSize();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    int sizeExcludeBulkLoad = getBatchEntrySizeExcludeBulkLoad(entryBatch);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    source.getSourceMetrics().setTimeStampNextToReplicate(entries.get(entries.size() - 1)<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        .getKey().getWriteTime());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    while (isActive()) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      try {<a name="line.180"></a>
+<span class="sourceLineNo">181</span>        try {<a name="line.181"></a>
+<span class="sourceLineNo">182</span>          source.tryThrottle(currentSize);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        } catch (InterruptedException e) {<a name="line.183"></a>
+<span class="sourceLineNo">184</span>          LOG.debug("Interrupted while sleeping for throttling control");<a name="line.184"></a>
+<span class="sourceLineNo">185</span>          Thread.currentThread().interrupt();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>          // current thread might be interrupted to terminate<a name="line.186"></a>
+<span class="sourceLineNo">187</span>          // directly go back to while() for confirm this<a name="line.187"></a>
+<span class="sourceLineNo">188</span>          continue;<a name="line.188"></a>
+<span class="sourceLineNo">189</span>        }<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        // create replicateContext here, so the entries can be GC'd upon return from this call<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        // stack<a name="line.191"></a>
+<span class="sourceLineNo">192</span>        ReplicationEndpoint.ReplicateContext replicateContext =<a name="line.192"></a>
+<span class="sourceLineNo">193</span>            new ReplicationEndpoint.ReplicateContext();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>        replicateContext.setEntries(entries).setSize(currentSize);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        replicateContext.setWalGroupId(walGroupId);<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        replicateContext.setTimeout(getAdaptiveTimeout(this.shipEditsTimeout, sleepMultiplier));<a name="line.196"></a>
+<span class="sourceLineNo">197</span><a name="line.197"></a>
+<span class="sourceLineNo">198</span>        long startTimeNs = System.nanoTime();<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        // send the edits to the endpoint. Will block until the edits are shipped and acknowledged<a name="line.199"></a>
+<span class="sourceLineNo">200</span>        boolean replicated = source.getReplicationEndpoint().replicate(replicateContext);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        long endTimeNs = System.nanoTime();<a name="line.201"></a>
+<span class="sourceLineNo">202</span><a name="line.202"></a>
+<span class="sourceLineNo">203</span>        if (!replicated) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>          continue;<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        } else {<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          sleepMultiplier = Math.max(sleepMultiplier - 1, 0);<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>        // Clean up hfile references<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        for (Entry entry : entries) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>          cleanUpHFileRefs(entry.getEdit());<a name="line.210"></a>
+<span class="sourceLineNo">211</span>          LOG.trace("shipped entry {}: ", entry);<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        }<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        // Log and clean up WAL logs<a name="line.213"></a>
+<span class="sourceLineNo">214</span>        updateLogPosition(entryBatch);<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>        //offsets totalBufferUsed by deducting shipped batchSize (excludes bulk load size)<a name="line.216"></a>
+<span class="sourceLineNo">217</span>        //this sizeExcludeBulkLoad has to use same calculation that when calling<a name="line.217"></a>
+<span class="sourceLineNo">218</span>        //acquireBufferQuota() in ReplicationSourceWALReader because they maintain<a name="line.218"></a>
+<span class="sourceLineNo">219</span>        //same variable: totalBufferUsed<a name="line.219"></a>
+<span class="sourceLineNo">220</span>        source.postShipEdits(entries, sizeExcludeBulkLoad);<a name="line.220"></a>
+<span class="sourceLineNo">221</span>        // FIXME check relationship between wal group and overall<a name="line.221"></a>
+<span class="sourceLineNo">222</span>        source.getSourceMetrics().shipBatch(entryBatch.getNbOperations(), currentSize,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          entryBatch.getNbHFiles());<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        source.getSourceMetrics().setAgeOfLastShippedOp(<a name="line.224"></a>
+<span class="sourceLineNo">225</span>          entries.get(entries.size() - 1).getKey().getWriteTime(), walGroupId);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>        source.getSourceMetrics().updateTableLevelMetrics(entryBatch.getWalEntriesWithSize());<a name="line.226"></a>
+<span class="sourceLineNo">227</span><a name="line.227"></a>
+<span class="sourceLineNo">228</span>        if (LOG.isTraceEnabled()) {<a name="line.228"></a>
+<span class="sourceLineNo">229</span>          LOG.debug("Replicated {} entries or {} operations in {} ms",<a name="line.229"></a>
+<span class="sourceLineNo">230</span>              entries.size(), entryBatch.getNbOperations(), (endTimeNs - startTimeNs) / 1000000);<a name="line.230"></a>
+<span class="sourceLineNo">231</span>        }<a name="line.231"></a>
+<span class="sourceLineNo">232</span>        break;<a name="line.232"></a>
+<span class="sourceLineNo">233</span>      } catch (Exception ex) {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>        LOG.warn("{} threw unknown exception:",<a name="line.234"></a>
+<span class="sourceLineNo">235</span>          source.getReplicationEndpoint().getClass().getName(), ex);<a name="line.235"></a>
+<span class="sourceLineNo">236</span>        if (sleepForRetries("ReplicationEndpoint threw exception", sleepForRetries, sleepMultiplier,<a name="line.236"></a>
+<span class="sourceLineNo">237</span>          maxRetriesMultiplier)) {<a name="line.237"></a>
+<span class="sourceLineNo">238</span>          sleepMultiplier++;<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>  private void cleanUpHFileRefs(WALEdit edit) throws IOException {<a name="line.244"></a>
+<span class="sourceLineNo">245</span>    String peerId = source.getPeerId();<a name="line.245"></a>
+<span class="sourceLineNo">246</span>    if (peerId.contains("-")) {<a name="line.246"></a>
+<span class="sourceLineNo">247</span>      // peerClusterZnode will be in the form peerId + "-" + rsZNode.<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      // A peerId will not have "-" in its name, see HBASE-11394<a name="line.248"></a>
+<span class="sourceLineNo">249</span>      peerId = peerId.split("-")[0];<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    }<a name="line.250"></a>
+<span class="sourceLineNo">251</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    int totalCells = cells.size();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      Cell cell = cells.get(i);<a name="line.254"></a>
+<span class="sourceLineNo">255</span>      if (CellUtil.matchingQualifier(cell, WALEdit.BULK_LOAD)) {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>        BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cell);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        int totalStores = stores.size();<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        for (int j = 0; j &lt; totalStores; j++) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          List&lt;String&gt; storeFileList = stores.get(j).getStoreFileList();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          source.getSourceManager().cleanUpHFileRefs(peerId, storeFileList);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          source.getSourceMetrics().decrSizeOfHFileRefsQueue(storeFileList.size());<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>  }<a name="line.266"></a>
+<span class="sourceLineNo">267</span><a name="line.267"></a>
+<span class="sourceLineNo">268</span>  private boolean updateLogPosition(WALEntryBatch batch) {<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    boolean updated = false;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    // if end of file is true, then the logPositionAndCleanOldLogs method will remove the file<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    // record on zk, so let's call it. The last wal position maybe zero if end of file is true and<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    // there is no entry in the batch. It is OK because that the queue storage will ignore the zero<a name="line.272"></a>
+<span class="sourceLineNo">273</span>    // position and the file will be removed soon in cleanOldLogs.<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    if (batch.isEndOfFile() || !batch.getLastWalPath().equals(currentPath) ||<a name="line.274"></a>
+<span class="sourceLineNo">275</span>      batch.getLastWalPosition() != currentPosition) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>      source.getSourceManager().logPositionAndCleanOldLogs(source, batch);<a name="line.276"></a>
+<span class="sourceLineNo">277</span>      updated = true;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    }<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    // if end of file is true, then we can just skip to the next file in queue.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    // the only exception is for recovered queue, if we reach the end of the queue, then there will<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    // no more files so here the currentPath may be null.<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    if (batch.isEndOfFile()) {<a name="line.282"></a>
+<span class="sourceLineNo">283</span>      currentPath = entryReader.getCurrentPath();<a name="line.283"></a>
+<span class="sourceLineNo">284</span>      currentPosition = 0L;<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    } else {<a name="line.285"></a>
+<span class="sourceLineNo">286</span>      currentPath = batch.getLastWalPath();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>      currentPosition = batch.getLastWalPosition();<a name="line.287"></a>
+<span class="sourceLineNo">288</span>    }<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    return updated;<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>  public void startup(UncaughtExceptionHandler handler) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    String name = Thread.currentThread().getName();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    Threads.setDaemonThreadRunning(this,<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      name + ".replicationSource.shipper" + walGroupId + "," + source.getQueueId(),<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      handler::uncaughtException);<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>  Path getCurrentPath() {<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    return entryReader.getCurrentPath();<a name="line.300"></a>
+<span class="sourceLineNo">301</span>  }<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>  long getCurrentPosition() {<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    return currentPosition;<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>  void setWALReader(ReplicationSourceWALReader entryReader) {<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    this.entryReader = entryReader;<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>  long getStartPosition() {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    return 0;<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>  protected boolean isActive() {<a name="line.315"></a>
+<span class="sourceLineNo">316</span>    return source.isSourceActive() &amp;&amp; state == WorkerState.RUNNING &amp;&amp; !isInterrupted();<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>  protected final void setWorkerState(WorkerState state) {<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    this.state = state;<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>  void stopWorker() {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>    setWorkerState(WorkerState.STOPPED);<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>  public boolean isFinished() {<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    return state == WorkerState.FINISHED;<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>   * Attempts to properly update &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;,<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * in case there were unprocessed entries batched by the reader to the shipper,<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * but the shipper didn't manage to ship those because the replication source is being terminated.<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * In that case, it iterates through the batched entries and decrease the pending<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * entries size from &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * &lt;p/&gt;<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   * &lt;b&gt;NOTES&lt;/b&gt;<a name="line.338"></a>
+<span class="sourceLineNo">339</span>   * 1) This method should only be called upon replication source termination.<a name="line.339"></a>
+<span class="sourceLineNo">340</span>   * It blocks waiting for both shipper and reader threads termination,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>   * to make sure no race conditions<a name="line.341"></a>
+<span class="sourceLineNo">342</span>   * when updating &lt;code&gt;ReplicationSourceManager.totalBufferUser&lt;/code&gt;.<a name="line.342"></a>
+<span class="sourceLineNo">343</span>   *<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * 2) It &lt;b&gt;does not&lt;/b&gt; attempt to terminate reader and shipper threads. Those &lt;b&gt;must&lt;/b&gt;<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * have been triggered interruption/termination prior to calling this method.<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  void clearWALEntryBatch() {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    long timeout = System.currentTimeMillis() + this.shipEditsTimeout;<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    while(this.isAlive() || this.entryReader.isAlive()){<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      try {<a name="line.350"></a>
+<span class="sourceLineNo">351</span>        if (System.currentTimeMillis() &gt;= timeout) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          LOG.warn("Interrupting source thread for peer {} without cleaning buffer usage "<a name="line.352"></a>
+<span class="sourceLineNo">353</span>            + "because clearWALEntryBatch method timed out whilst waiting reader/shipper "<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            + "thread to stop.", this.source.getPeerId());<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          Thread.currentThread().interrupt();<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        } else {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          // Wait both shipper and reader threads to stop<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          Thread.sleep(this.sleepForRetries);<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      } catch (InterruptedException e) {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>        LOG.warn("{} Interrupted while waiting {} to stop on clearWALEntryBatch: {}",<a name="line.361"></a>
+<span class="sourceLineNo">362</span>          this.source.getPeerId(), this.getName(), e);<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        Thread.currentThread().interrupt();<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>    LongAccumulator totalToDecrement = new LongAccumulator((a,b) -&gt; a + b, 0);<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    entryReader.entryBatchQueue.forEach(w -&gt; {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>      entryReader.entryBatchQueue.remove(w);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      w.getWalEntries().forEach(e -&gt; {<a name="line.369"></a>
+<span class="sourceLineNo">370</span>        long entrySizeExcludeBulkLoad = entryReader.getEntrySizeExcludeBulkLoad(e);<a name="line.370"></a>
+<span class="sourceLineNo">371</span>        totalToDecrement.accumulate(entrySizeExcludeBulkLoad);<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>    LOG.trace("Decrementing totalBufferUsed by {}B while stopping Replication WAL Readers.",<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      totalToDecrement.longValue());<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    source.getSourceManager().getTotalBufferUsed().addAndGet(-totalToDecrement.longValue());<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>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
index c20d583..5d467a2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceWALReader.html
@@ -68,370 +68,371 @@
 <span class="sourceLineNo">060</span>  private final WALEntryFilter filter;<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  private final ReplicationSource source;<a name="line.61"></a>
 <span class="sourceLineNo">062</span><a name="line.62"></a>
-<span class="sourceLineNo">063</span>  private final BlockingQueue&lt;WALEntryBatch&gt; entryBatchQueue;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  // max (heap) size of each batch - multiply by number of batches in queue to get total<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private final long replicationBatchSizeCapacity;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  // max count of each batch - multiply by number of batches in queue to get total<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final int replicationBatchCountCapacity;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  // position in the WAL to start reading at<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private long currentPosition;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final long sleepForRetries;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final int maxRetriesMultiplier;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>  private final boolean eofAutoRecovery;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>  //Indicates whether this particular worker is running<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  private boolean isReaderRunning = true;<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private AtomicLong totalBufferUsed;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  private long totalBufferQuota;<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>   * Creates a reader worker for a given WAL queue. Reads WAL entries off a given queue, batches the<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * entries, and puts them on a batch queue.<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param fs the files system to use<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * @param conf configuration to use<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param logQueue The WAL queue to read off of<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param startPosition position in the first WAL to start reading from<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   * @param filter The filter to use while reading<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * @param source replication source<a name="line.88"></a>
-<span class="sourceLineNo">089</span>   */<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  public ReplicationSourceWALReader(FileSystem fs, Configuration conf,<a name="line.90"></a>
-<span class="sourceLineNo">091</span>      PriorityBlockingQueue&lt;Path&gt; logQueue, long startPosition, WALEntryFilter filter,<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      ReplicationSource source) {<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    this.logQueue = logQueue;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    this.currentPosition = startPosition;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    this.fs = fs;<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    this.conf = conf;<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    this.filter = filter;<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    this.source = source;<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    this.replicationBatchSizeCapacity =<a name="line.99"></a>
-<span class="sourceLineNo">100</span>        this.conf.getLong("replication.source.size.capacity", 1024 * 1024 * 64);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    this.replicationBatchCountCapacity = this.conf.getInt("replication.source.nb.capacity", 25000);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    // memory used will be batchSizeCapacity * (nb.batches + 1)<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    // the +1 is for the current thread reading before placing onto the queue<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    int batchCount = conf.getInt("replication.source.nb.batches", 1);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    this.totalBufferUsed = source.getSourceManager().getTotalBufferUsed();<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    this.totalBufferQuota = source.getSourceManager().getTotalBufferLimit();<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    this.sleepForRetries =<a name="line.107"></a>
-<span class="sourceLineNo">108</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    this.maxRetriesMultiplier =<a name="line.109"></a>
-<span class="sourceLineNo">110</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    this.eofAutoRecovery = conf.getBoolean("replication.source.eof.autorecovery", false);<a name="line.111"></a>
-<span class="sourceLineNo">112</span>    this.entryBatchQueue = new LinkedBlockingQueue&lt;&gt;(batchCount);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    LOG.info("peerClusterZnode=" + source.getQueueId()<a name="line.113"></a>
-<span class="sourceLineNo">114</span>        + ", ReplicationSourceWALReaderThread : " + source.getPeerId()<a name="line.114"></a>
-<span class="sourceLineNo">115</span>        + " inited, replicationBatchSizeCapacity=" + replicationBatchSizeCapacity<a name="line.115"></a>
-<span class="sourceLineNo">116</span>        + ", replicationBatchCountCapacity=" + replicationBatchCountCapacity<a name="line.116"></a>
-<span class="sourceLineNo">117</span>        + ", replicationBatchQueueCapacity=" + batchCount);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
-<span class="sourceLineNo">119</span><a name="line.119"></a>
-<span class="sourceLineNo">120</span>  @Override<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  public void run() {<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    int sleepMultiplier = 1;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    while (isReaderRunning()) { // we only loop back here if something fatal happened to our stream<a name="line.123"></a>
-<span class="sourceLineNo">124</span>      try (WALEntryStream entryStream =<a name="line.124"></a>
-<span class="sourceLineNo">125</span>          new WALEntryStream(logQueue, conf, currentPosition,<a name="line.125"></a>
-<span class="sourceLineNo">126</span>              source.getWALFileLengthProvider(), source.getServerWALsBelongTo(),<a name="line.126"></a>
-<span class="sourceLineNo">127</span>              source.getSourceMetrics())) {<a name="line.127"></a>
-<span class="sourceLineNo">128</span>        while (isReaderRunning()) { // loop here to keep reusing stream while we can<a name="line.128"></a>
-<span class="sourceLineNo">129</span>          if (!source.isPeerEnabled()) {<a name="line.129"></a>
-<span class="sourceLineNo">130</span>            Threads.sleep(sleepForRetries);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>            continue;<a name="line.131"></a>
-<span class="sourceLineNo">132</span>          }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>          if (!checkQuota()) {<a name="line.133"></a>
-<span class="sourceLineNo">134</span>            continue;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>          }<a name="line.135"></a>
-<span class="sourceLineNo">136</span>          WALEntryBatch batch = readWALEntries(entryStream);<a name="line.136"></a>
-<span class="sourceLineNo">137</span>          currentPosition = entryStream.getPosition();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>          if (batch != null) {<a name="line.138"></a>
-<span class="sourceLineNo">139</span>            // need to propagate the batch even it has no entries since it may carry the last<a name="line.139"></a>
-<span class="sourceLineNo">140</span>            // sequence id information for serial replication.<a name="line.140"></a>
-<span class="sourceLineNo">141</span>            LOG.debug("Read {} WAL entries eligible for replication", batch.getNbEntries());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>            entryBatchQueue.put(batch);<a name="line.142"></a>
-<span class="sourceLineNo">143</span>            sleepMultiplier = 1;<a name="line.143"></a>
-<span class="sourceLineNo">144</span>          } else { // got no entries and didn't advance position in WAL<a name="line.144"></a>
-<span class="sourceLineNo">145</span>            handleEmptyWALEntryBatch();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>            entryStream.reset(); // reuse stream<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>      } catch (IOException e) { // stream related<a name="line.149"></a>
-<span class="sourceLineNo">150</span>        if (sleepMultiplier &lt; maxRetriesMultiplier) {<a name="line.150"></a>
-<span class="sourceLineNo">151</span>          LOG.debug("Failed to read stream of replication entries: " + e);<a name="line.151"></a>
-<span class="sourceLineNo">152</span>          sleepMultiplier++;<a name="line.152"></a>
-<span class="sourceLineNo">153</span>        } else {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>          LOG.error("Failed to read stream of replication entries", e);<a name="line.154"></a>
-<span class="sourceLineNo">155</span>          handleEofException(e);<a name="line.155"></a>
-<span class="sourceLineNo">156</span>        }<a name="line.156"></a>
-<span class="sourceLineNo">157</span>        Threads.sleep(sleepForRetries * sleepMultiplier);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>      } catch (InterruptedException e) {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>        LOG.trace("Interrupted while sleeping between WAL reads");<a name="line.159"></a>
-<span class="sourceLineNo">160</span>        Thread.currentThread().interrupt();<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><a name="line.164"></a>
-<span class="sourceLineNo">165</span>  // returns true if we reach the size limit for batch, i.e, we need to finish the batch and return.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  protected final boolean addEntryToBatch(WALEntryBatch batch, Entry entry) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    WALEdit edit = entry.getEdit();<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    if (edit == null || edit.isEmpty()) {<a name="line.168"></a>
-<span class="sourceLineNo">169</span>      LOG.debug("Edit null or empty for entry {} ", entry);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      return false;<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    LOG.debug("updating TimeStampOfLastAttempted to {}, from entry {}, for source queue: {}",<a name="line.172"></a>
-<span class="sourceLineNo">173</span>        entry.getKey().getWriteTime(), entry.getKey(), this.source.getQueueId());<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    long entrySize = getEntrySizeIncludeBulkLoad(entry);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    long entrySizeExcludeBulkLoad = getEntrySizeExcludeBulkLoad(entry);<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    batch.addEntry(entry, entrySize);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    updateBatchStats(batch, entry, entrySize);<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    boolean totalBufferTooLarge = acquireBufferQuota(entrySizeExcludeBulkLoad);<a name="line.178"></a>
-<span class="sourceLineNo">179</span><a name="line.179"></a>
-<span class="sourceLineNo">180</span>    // Stop if too many entries or too big<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    return totalBufferTooLarge || batch.getHeapSize() &gt;= replicationBatchSizeCapacity ||<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      batch.getNbEntries() &gt;= replicationBatchCountCapacity;<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>  protected static final boolean switched(WALEntryStream entryStream, Path path) {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    Path newPath = entryStream.getCurrentPath();<a name="line.186"></a>
-<span class="sourceLineNo">187</span>    return newPath == null || !path.getName().equals(newPath.getName());<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>  protected WALEntryBatch readWALEntries(WALEntryStream entryStream)<a name="line.190"></a>
-<span class="sourceLineNo">191</span>      throws IOException, InterruptedException {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>    Path currentPath = entryStream.getCurrentPath();<a name="line.192"></a>
-<span class="sourceLineNo">193</span>    if (!entryStream.hasNext()) {<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      // check whether we have switched a file<a name="line.194"></a>
-<span class="sourceLineNo">195</span>      if (currentPath != null &amp;&amp; switched(entryStream, currentPath)) {<a name="line.195"></a>
-<span class="sourceLineNo">196</span>        return WALEntryBatch.endOfFile(currentPath);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      } else {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        return null;<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>    if (currentPath != null) {<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      if (switched(entryStream, currentPath)) {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        return WALEntryBatch.endOfFile(currentPath);<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    } else {<a name="line.205"></a>
-<span class="sourceLineNo">206</span>      // when reading from the entry stream first time we will enter here<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      currentPath = entryStream.getCurrentPath();<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    WALEntryBatch batch = createBatch(entryStream);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    for (;;) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      Entry entry = entryStream.next();<a name="line.211"></a>
-<span class="sourceLineNo">212</span>      batch.setLastWalPosition(entryStream.getPosition());<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      entry = filterEntry(entry);<a name="line.213"></a>
-<span class="sourceLineNo">214</span>      if (entry != null) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>        if (addEntryToBatch(batch, entry)) {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>          break;<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>      boolean hasNext = entryStream.hasNext();<a name="line.219"></a>
-<span class="sourceLineNo">220</span>      // always return if we have switched to a new file<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      if (switched(entryStream, currentPath)) {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>        batch.setEndOfFile(true);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>        break;<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      }<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      if (!hasNext) {<a name="line.225"></a>
-<span class="sourceLineNo">226</span>        break;<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>    return batch;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>  }<a name="line.230"></a>
-<span class="sourceLineNo">231</span><a name="line.231"></a>
-<span class="sourceLineNo">232</span>  private void handleEmptyWALEntryBatch() throws InterruptedException {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>    LOG.trace("Didn't read any new entries from WAL");<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    if (logQueue.isEmpty()) {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      // we're done with current queue, either this is a recovered queue, or it is the special group<a name="line.235"></a>
-<span class="sourceLineNo">236</span>      // for a sync replication peer and the peer has been transited to DA or S state.<a name="line.236"></a>
-<span class="sourceLineNo">237</span>      setReaderRunning(false);<a name="line.237"></a>
-<span class="sourceLineNo">238</span>      // shuts down shipper thread immediately<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      entryBatchQueue.put(WALEntryBatch.NO_MORE_DATA);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    } else {<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      Thread.sleep(sleepForRetries);<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>  // if we get an EOF due to a zero-length log, and there are other logs in queue<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  // (highly likely we've closed the current log), we've hit the max retries, and autorecovery is<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  // enabled, then dump the log<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  private void handleEofException(IOException e) {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    if ((e instanceof EOFException || e.getCause() instanceof EOFException) &amp;&amp;<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      logQueue.size() &gt; 1 &amp;&amp; this.eofAutoRecovery) {<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      try {<a name="line.251"></a>
-<span class="sourceLineNo">252</span>        if (fs.getFileStatus(logQueue.peek()).getLen() == 0) {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          LOG.warn("Forcing removal of 0 length log in queue: " + logQueue.peek());<a name="line.253"></a>
-<span class="sourceLineNo">254</span>          logQueue.remove();<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          currentPosition = 0;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>        }<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      } catch (IOException ioe) {<a name="line.257"></a>
-<span class="sourceLineNo">258</span>        LOG.warn("Couldn't get file length information about log " + logQueue.peek());<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
-<span class="sourceLineNo">261</span>  }<a name="line.261"></a>
-<span class="sourceLineNo">262</span><a name="line.262"></a>
-<span class="sourceLineNo">263</span>  public Path getCurrentPath() {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    // if we've read some WAL entries, get the Path we read from<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    WALEntryBatch batchQueueHead = entryBatchQueue.peek();<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (batchQueueHead != null) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      return batchQueueHead.getLastWalPath();<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
-<span class="sourceLineNo">269</span>    // otherwise, we must be currently reading from the head of the log queue<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    return logQueue.peek();<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span><a name="line.272"></a>
-<span class="sourceLineNo">273</span>  //returns false if we've already exceeded the global quota<a name="line.273"></a>
-<span class="sourceLineNo">274</span>  private boolean checkQuota() {<a name="line.274"></a>
-<span class="sourceLineNo">275</span>    // try not to go over total quota<a name="line.275"></a>
-<span class="sourceLineNo">276</span>    if (totalBufferUsed.get() &gt; totalBufferQuota) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>      LOG.warn("peer={}, can't read more edits from WAL as buffer usage {}B exceeds limit {}B",<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          this.source.getPeerId(), totalBufferUsed.get(), totalBufferQuota);<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      Threads.sleep(sleepForRetries);<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      return false;<a name="line.280"></a>
-<span class="sourceLineNo">281</span>    }<a name="line.281"></a>
-<span class="sourceLineNo">282</span>    return true;<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>  protected final WALEntryBatch createBatch(WALEntryStream entryStream) {<a name="line.285"></a>
-<span class="sourceLineNo">286</span>    return new WALEntryBatch(replicationBatchCountCapacity, entryStream.getCurrentPath());<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>  protected final Entry filterEntry(Entry entry) {<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    Entry filtered = filter.filter(entry);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    if (entry != null &amp;&amp; (filtered == null || filtered.getEdit().size() == 0)) {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>      LOG.debug("Filtered entry for replication: {}", entry);<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      source.getSourceMetrics().incrLogEditsFiltered();<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    }<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    return filtered;<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>   * Retrieves the next batch of WAL entries from the queue, waiting up to the specified time for a<a name="line.299"></a>
-<span class="sourceLineNo">300</span>   * batch to become available<a name="line.300"></a>
-<span class="sourceLineNo">301</span>   * @return A batch of entries, along with the position in the log after reading the batch<a name="line.301"></a>
-<span class="sourceLineNo">302</span>   * @throws InterruptedException if interrupted while waiting<a name="line.302"></a>
-<span class="sourceLineNo">303</span>   */<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public WALEntryBatch take() throws InterruptedException {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>    return entryBatchQueue.take();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>  }<a name="line.306"></a>
-<span class="sourceLineNo">307</span><a name="line.307"></a>
-<span class="sourceLineNo">308</span>  public WALEntryBatch poll(long timeout) throws InterruptedException {<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    return entryBatchQueue.poll(timeout, TimeUnit.MILLISECONDS);<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>  private long getEntrySizeIncludeBulkLoad(Entry entry) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    WALEdit edit = entry.getEdit();<a name="line.313"></a>
-<span class="sourceLineNo">314</span>    return  getEntrySizeExcludeBulkLoad(entry) + sizeOfStoreFilesIncludeBulkLoad(edit);<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>  public static long getEntrySizeExcludeBulkLoad(Entry entry) {<a name="line.317"></a>
-<span class="sourceLineNo">318</span>    WALEdit edit = entry.getEdit();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>    WALKey key = entry.getKey();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    return edit.heapSize() + key.estimatedSerializedSizeOf();<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">063</span>  @InterfaceAudience.Private<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  final BlockingQueue&lt;WALEntryBatch&gt; entryBatchQueue;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  // max (heap) size of each batch - multiply by number of batches in queue to get total<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final long replicationBatchSizeCapacity;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  // max count of each batch - multiply by number of batches in queue to get total<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final int replicationBatchCountCapacity;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  // position in the WAL to start reading at<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private long currentPosition;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final long sleepForRetries;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private final int maxRetriesMultiplier;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>  private final boolean eofAutoRecovery;<a name="line.73"></a>
+<span class="sourceLineNo">074</span><a name="line.74"></a>
+<span class="sourceLineNo">075</span>  //Indicates whether this particular worker is running<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  private boolean isReaderRunning = true;<a name="line.76"></a>
+<span class="sourceLineNo">077</span><a name="line.77"></a>
+<span class="sourceLineNo">078</span>  private AtomicLong totalBufferUsed;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>  private long totalBufferQuota;<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>   * Creates a reader worker for a given WAL queue. Reads WAL entries off a given queue, batches the<a name="line.82"></a>
+<span class="sourceLineNo">083</span>   * entries, and puts them on a batch queue.<a name="line.83"></a>
+<span class="sourceLineNo">084</span>   * @param fs the files system to use<a name="line.84"></a>
+<span class="sourceLineNo">085</span>   * @param conf configuration to use<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * @param logQueue The WAL queue to read off of<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param startPosition position in the first WAL to start reading from<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param filter The filter to use while reading<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * @param source replication source<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   */<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public ReplicationSourceWALReader(FileSystem fs, Configuration conf,<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      PriorityBlockingQueue&lt;Path&gt; logQueue, long startPosition, WALEntryFilter filter,<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      ReplicationSource source) {<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    this.logQueue = logQueue;<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    this.currentPosition = startPosition;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    this.fs = fs;<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    this.conf = conf;<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    this.filter = filter;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    this.source = source;<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    this.replicationBatchSizeCapacity =<a name="line.100"></a>
+<span class="sourceLineNo">101</span>        this.conf.getLong("replication.source.size.capacity", 1024 * 1024 * 64);<a name="line.101"></a>
+<span class="sourceLineNo">102</span>    this.replicationBatchCountCapacity = this.conf.getInt("replication.source.nb.capacity", 25000);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    // memory used will be batchSizeCapacity * (nb.batches + 1)<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    // the +1 is for the current thread reading before placing onto the queue<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    int batchCount = conf.getInt("replication.source.nb.batches", 1);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    this.totalBufferUsed = source.getSourceManager().getTotalBufferUsed();<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    this.totalBufferQuota = source.getSourceManager().getTotalBufferLimit();<a name="line.107"></a>
+<span class="sourceLineNo">108</span>    this.sleepForRetries =<a name="line.108"></a>
+<span class="sourceLineNo">109</span>        this.conf.getLong("replication.source.sleepforretries", 1000);    // 1 second<a name="line.109"></a>
+<span class="sourceLineNo">110</span>    this.maxRetriesMultiplier =<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        this.conf.getInt("replication.source.maxretriesmultiplier", 300); // 5 minutes @ 1 sec per<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    this.eofAutoRecovery = conf.getBoolean("replication.source.eof.autorecovery", false);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    this.entryBatchQueue = new LinkedBlockingQueue&lt;&gt;(batchCount);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    LOG.info("peerClusterZnode=" + source.getQueueId()<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        + ", ReplicationSourceWALReaderThread : " + source.getPeerId()<a name="line.115"></a>
+<span class="sourceLineNo">116</span>        + " inited, replicationBatchSizeCapacity=" + replicationBatchSizeCapacity<a name="line.116"></a>
+<span class="sourceLineNo">117</span>        + ", replicationBatchCountCapacity=" + replicationBatchCountCapacity<a name="line.117"></a>
+<span class="sourceLineNo">118</span>        + ", replicationBatchQueueCapacity=" + batchCount);<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>  @Override<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  public void run() {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    int sleepMultiplier = 1;<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    while (isReaderRunning()) { // we only loop back here if something fatal happened to our stream<a name="line.124"></a>
+<span class="sourceLineNo">125</span>      try (WALEntryStream entryStream =<a name="line.125"></a>
+<span class="sourceLineNo">126</span>          new WALEntryStream(logQueue, conf, currentPosition,<a name="line.126"></a>
+<span class="sourceLineNo">127</span>              source.getWALFileLengthProvider(), source.getServerWALsBelongTo(),<a name="line.127"></a>
+<span class="sourceLineNo">128</span>              source.getSourceMetrics())) {<a name="line.128"></a>
+<span class="sourceLineNo">129</span>        while (isReaderRunning()) { // loop here to keep reusing stream while we can<a name="line.129"></a>
+<span class="sourceLineNo">130</span>          if (!source.isPeerEnabled()) {<a name="line.130"></a>
+<span class="sourceLineNo">131</span>            Threads.sleep(sleepForRetries);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>            continue;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>          }<a name="line.133"></a>
+<span class="sourceLineNo">134</span>          if (!checkQuota()) {<a name="line.134"></a>
+<span class="sourceLineNo">135</span>            continue;<a name="line.135"></a>
+<span class="sourceLineNo">136</span>          }<a name="line.136"></a>
+<span class="sourceLineNo">137</span>          WALEntryBatch batch = readWALEntries(entryStream);<a name="line.137"></a>
+<span class="sourceLineNo">138</span>          currentPosition = entryStream.getPosition();<a name="line.138"></a>
+<span class="sourceLineNo">139</span>          if (batch != null) {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>            // need to propagate the batch even it has no entries since it may carry the last<a name="line.140"></a>
+<span class="sourceLineNo">141</span>            // sequence id information for serial replication.<a name="line.141"></a>
+<span class="sourceLineNo">142</span>            LOG.debug("Read {} WAL entries eligible for replication", batch.getNbEntries());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>            entryBatchQueue.put(batch);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>            sleepMultiplier = 1;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>          } else { // got no entries and didn't advance position in WAL<a name="line.145"></a>
+<span class="sourceLineNo">146</span>            handleEmptyWALEntryBatch();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>            entryStream.reset(); // reuse stream<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>      } catch (IOException e) { // stream related<a name="line.150"></a>
+<span class="sourceLineNo">151</span>        if (sleepMultiplier &lt; maxRetriesMultiplier) {<a name="line.151"></a>
+<span class="sourceLineNo">152</span>          LOG.debug("Failed to read stream of replication entries: " + e);<a name="line.152"></a>
+<span class="sourceLineNo">153</span>          sleepMultiplier++;<a name="line.153"></a>
+<span class="sourceLineNo">154</span>        } else {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>          LOG.error("Failed to read stream of replication entries", e);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>          handleEofException(e);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        }<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        Threads.sleep(sleepForRetries * sleepMultiplier);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      } catch (InterruptedException e) {<a name="line.159"></a>
+<span class="sourceLineNo">160</span>        LOG.trace("Interrupted while sleeping between WAL reads");<a name="line.160"></a>
+<span class="sourceLineNo">161</span>        Thread.currentThread().interrupt();<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>  }<a name="line.164"></a>
+<span class="sourceLineNo">165</span><a name="line.165"></a>
+<span class="sourceLineNo">166</span>  // returns true if we reach the size limit for batch, i.e, we need to finish the batch and return.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  protected final boolean addEntryToBatch(WALEntryBatch batch, Entry entry) {<a name="line.167"></a>
+<span class="sourceLineNo">168</span>    WALEdit edit = entry.getEdit();<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    if (edit == null || edit.isEmpty()) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      LOG.debug("Edit null or empty for entry {} ", entry);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>      return false;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    }<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    LOG.debug("updating TimeStampOfLastAttempted to {}, from entry {}, for source queue: {}",<a name="line.173"></a>
+<span class="sourceLineNo">174</span>        entry.getKey().getWriteTime(), entry.getKey(), this.source.getQueueId());<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    long entrySize = getEntrySizeIncludeBulkLoad(entry);<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    long entrySizeExcludeBulkLoad = getEntrySizeExcludeBulkLoad(entry);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    batch.addEntry(entry, entrySize);<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    updateBatchStats(batch, entry, entrySize);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    boolean totalBufferTooLarge = acquireBufferQuota(entrySizeExcludeBulkLoad);<a name="line.179"></a>
+<span class="sourceLineNo">180</span><a name="line.180"></a>
+<span class="sourceLineNo">181</span>    // Stop if too many entries or too big<a name="line.181"></a>
+<span class="sourceLineNo">182</span>    return totalBufferTooLarge || batch.getHeapSize() &gt;= replicationBatchSizeCapacity ||<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      batch.getNbEntries() &gt;= replicationBatchCountCapacity;<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>  protected static final boolean switched(WALEntryStream entryStream, Path path) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>    Path newPath = entryStream.getCurrentPath();<a name="line.187"></a>
+<span class="sourceLineNo">188</span>    return newPath == null || !path.getName().equals(newPath.getName());<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>  protected WALEntryBatch readWALEntries(WALEntryStream entryStream)<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      throws IOException, InterruptedException {<a name="line.192"></a>
+<span class="sourceLineNo">193</span>    Path currentPath = entryStream.getCurrentPath();<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    if (!entryStream.hasNext()) {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      // check whether we have switched a file<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      if (currentPath != null &amp;&amp; switched(entryStream, currentPath)) {<a name="line.196"></a>
+<span class="sourceLineNo">197</span>        return WALEntryBatch.endOfFile(currentPath);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      } else {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>        return null;<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>    if (currentPath != null) {<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      if (switched(entryStream, currentPath)) {<a name="line.203"></a>
+<span class="sourceLineNo">204</span>        return WALEntryBatch.endOfFile(currentPath);<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      }<a name="line.205"></a>
+<span class="sourceLineNo">206</span>    } else {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      // when reading from the entry stream first time we will enter here<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      currentPath = entryStream.getCurrentPath();<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    }<a name="line.209"></a>
+<span class="sourceLineNo">210</span>    WALEntryBatch batch = createBatch(entryStream);<a name="line.210"></a>
+<span class="sourceLineNo">211</span>    for (;;) {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>      Entry entry = entryStream.next();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      batch.setLastWalPosition(entryStream.getPosition());<a name="line.213"></a>
+<span class="sourceLineNo">214</span>      entry = filterEntry(entry);<a name="line.214"></a>
+<span class="sourceLineNo">215</span>      if (entry != null) {<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        if (addEntryToBatch(batch, entry)) {<a name="line.216"></a>
+<span class="sourceLineNo">217</span>          break;<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>      boolean hasNext = entryStream.hasNext();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      // always return if we have switched to a new file<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      if (switched(entryStream, currentPath)) {<a name="line.222"></a>
+<span class="sourceLineNo">223</span>        batch.setEndOfFile(true);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>        break;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      }<a name="line.225"></a>
+<span class="sourceLineNo">226</span>      if (!hasNext) {<a name="line.226"></a>
+<span class="sourceLineNo">227</span>        break;<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>    return batch;<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  }<a name="line.231"></a>
+<span class="sourceLineNo">232</span><a name="line.232"></a>
+<span class="sourceLineNo">233</span>  private void handleEmptyWALEntryBatch() throws InterruptedException {<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    LOG.trace("Didn't read any new entries from WAL");<a name="line.234"></a>
+<span class="sourceLineNo">235</span>    if (logQueue.isEmpty()) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>      // we're done with current queue, either this is a recovered queue, or it is the special group<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      // for a sync replication peer and the peer has been transited to DA or S state.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      setReaderRunning(false);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>      // shuts down shipper thread immediately<a name="line.239"></a>
+<span class="sourceLineNo">240</span>      entryBatchQueue.put(WALEntryBatch.NO_MORE_DATA);<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    } else {<a name="line.241"></a>
+<span class="sourceLineNo">242</span>      Thread.sleep(sleepForRetries);<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>  // if we get an EOF due to a zero-length log, and there are other logs in queue<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  // (highly likely we've closed the current log), we've hit the max retries, and autorecovery is<a name="line.247"></a>
+<span class="sourceLineNo">248</span>  // enabled, then dump the log<a name="line.248"></a>
+<span class="sourceLineNo">249</span>  private void handleEofException(IOException e) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>    if ((e instanceof EOFException || e.getCause() instanceof EOFException) &amp;&amp;<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      logQueue.size() &gt; 1 &amp;&amp; this.eofAutoRecovery) {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      try {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        if (fs.getFileStatus(logQueue.peek()).getLen() == 0) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          LOG.warn("Forcing removal of 0 length log in queue: " + logQueue.peek());<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          logQueue.remove();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          currentPosition = 0;<a name="line.256"></a>
+<span class="sourceLineNo">257</span>        }<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      } catch (IOException ioe) {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>        LOG.warn("Couldn't get file length information about log " + logQueue.peek());<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><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  public Path getCurrentPath() {<a name="line.264"></a>
+<span class="sourceLineNo">265</span>    // if we've read some WAL entries, get the Path we read from<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    WALEntryBatch batchQueueHead = entryBatchQueue.peek();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>    if (batchQueueHead != null) {<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      return batchQueueHead.getLastWalPath();<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    }<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    // otherwise, we must be currently reading from the head of the log queue<a name="line.270"></a>
+<span class="sourceLineNo">271</span>    return logQueue.peek();<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>  //returns false if we've already exceeded the global quota<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  private boolean checkQuota() {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>    // try not to go over total quota<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    if (totalBufferUsed.get() &gt; totalBufferQuota) {<a name="line.277"></a>
+<span class="sourceLineNo">278</span>      LOG.warn("peer={}, can't read more edits from WAL as buffer usage {}B exceeds limit {}B",<a name="line.278"></a>
+<span class="sourceLineNo">279</span>          this.source.getPeerId(), totalBufferUsed.get(), totalBufferQuota);<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      Threads.sleep(sleepForRetries);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>      return false;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    }<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    return true;<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>  protected final WALEntryBatch createBatch(WALEntryStream entryStream) {<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    return new WALEntryBatch(replicationBatchCountCapacity, entryStream.getCurrentPath());<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>  protected final Entry filterEntry(Entry entry) {<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    Entry filtered = filter.filter(entry);<a name="line.291"></a>
+<span class="sourceLineNo">292</span>    if (entry != null &amp;&amp; (filtered == null || filtered.getEdit().size() == 0)) {<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      LOG.debug("Filtered entry for replication: {}", entry);<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      source.getSourceMetrics().incrLogEditsFiltered();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    }<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    return filtered;<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>   * Retrieves the next batch of WAL entries from the queue, waiting up to the specified time for a<a name="line.300"></a>
+<span class="sourceLineNo">301</span>   * batch to become available<a name="line.301"></a>
+<span class="sourceLineNo">302</span>   * @return A batch of entries, along with the position in the log after reading the batch<a name="line.302"></a>
+<span class="sourceLineNo">303</span>   * @throws InterruptedException if interrupted while waiting<a name="line.303"></a>
+<span class="sourceLineNo">304</span>   */<a name="line.304"></a>
+<span class="sourceLineNo">305</span>  public WALEntryBatch take() throws InterruptedException {<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    return entryBatchQueue.take();<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>  public WALEntryBatch poll(long timeout) throws InterruptedException {<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    return entryBatchQueue.poll(timeout, TimeUnit.MILLISECONDS);<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>  private long getEntrySizeIncludeBulkLoad(Entry entry) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    WALEdit edit = entry.getEdit();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>    return  getEntrySizeExcludeBulkLoad(entry) + sizeOfStoreFilesIncludeBulkLoad(edit);<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>  public static long getEntrySizeExcludeBulkLoad(Entry entry) {<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    WALEdit edit = entry.getEdit();<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    WALKey key = entry.getKey();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>    return edit.heapSize() + key.estimatedSerializedSizeOf();<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>  private void updateBatchStats(WALEntryBatch batch, Entry entry, long entrySize) {<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    WALEdit edit = entry.getEdit();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>    batch.incrementHeapSize(entrySize);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    Pair&lt;Integer, Integer&gt; nbRowsAndHFiles = countDistinctRowKeysAndHFiles(edit);<a name="line.327"></a>
-<span class="sourceLineNo">328</span>    batch.incrementNbRowKeys(nbRowsAndHFiles.getFirst());<a name="line.328"></a>
-<span class="sourceLineNo">329</span>    batch.incrementNbHFiles(nbRowsAndHFiles.getSecond());<a name="line.329"></a>
-<span class="sourceLineNo">330</span>  }<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>  /**<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   * Count the number of different row keys in the given edit because of mini-batching. We assume<a name="line.333"></a>
-<span class="sourceLineNo">334</span>   * that there's at least one Cell in the WALEdit.<a name="line.334"></a>
-<span class="sourceLineNo">335</span>   * @param edit edit to count row keys from<a name="line.335"></a>
-<span class="sourceLineNo">336</span>   * @return number of different row keys and HFiles<a name="line.336"></a>
-<span class="sourceLineNo">337</span>   */<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  private Pair&lt;Integer, Integer&gt; countDistinctRowKeysAndHFiles(WALEdit edit) {<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    int distinctRowKeys = 1;<a name="line.340"></a>
-<span class="sourceLineNo">341</span>    int totalHFileEntries = 0;<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    Cell lastCell = cells.get(0);<a name="line.342"></a>
-<span class="sourceLineNo">343</span><a name="line.343"></a>
-<span class="sourceLineNo">344</span>    int totalCells = edit.size();<a name="line.344"></a>
-<span class="sourceLineNo">345</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      // Count HFiles to be replicated<a name="line.346"></a>
-<span class="sourceLineNo">347</span>      if (CellUtil.matchingQualifier(cells.get(i), WALEdit.BULK_LOAD)) {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>        try {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>          BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cells.get(i));<a name="line.349"></a>
-<span class="sourceLineNo">350</span>          List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.350"></a>
-<span class="sourceLineNo">351</span>          int totalStores = stores.size();<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          for (int j = 0; j &lt; totalStores; j++) {<a name="line.352"></a>
-<span class="sourceLineNo">353</span>            totalHFileEntries += stores.get(j).getStoreFileList().size();<a name="line.353"></a>
-<span class="sourceLineNo">354</span>          }<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        } catch (IOException e) {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>          LOG.error("Failed to deserialize bulk load entry from wal edit. "<a name="line.356"></a>
-<span class="sourceLineNo">357</span>              + "Then its hfiles count will not be added into metric.");<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><a name="line.360"></a>
-<span class="sourceLineNo">361</span>      if (!CellUtil.matchingRows(cells.get(i), lastCell)) {<a name="line.361"></a>
-<span class="sourceLineNo">362</span>        distinctRowKeys++;<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      }<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      lastCell = cells.get(i);<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>    Pair&lt;Integer, Integer&gt; result = new Pair&lt;&gt;(distinctRowKeys, totalHFileEntries);<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    return result;<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>   * Calculate the total size of all the store files<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * @param edit edit to count row keys from<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @return the total size of the store files<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   */<a name="line.375"></a>
-<span class="sourceLineNo">376</span>  private int sizeOfStoreFilesIncludeBulkLoad(WALEdit edit) {<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    int totalStoreFilesSize = 0;<a name="line.378"></a>
-<span class="sourceLineNo">379</span><a name="line.379"></a>
-<span class="sourceLineNo">380</span>    int totalCells = edit.size();<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      if (CellUtil.matchingQualifier(cells.get(i), WALEdit.BULK_LOAD)) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>        try {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>          BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cells.get(i));<a name="line.384"></a>
-<span class="sourceLineNo">385</span>          List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.385"></a>
-<span class="sourceLineNo">386</span>          int totalStores = stores.size();<a name="line.386"></a>
-<span class="sourceLineNo">387</span>          for (int j = 0; j &lt; totalStores; j++) {<a name="line.387"></a>
-<span class="sourceLineNo">388</span>            totalStoreFilesSize =<a name="line.388"></a>
-<span class="sourceLineNo">389</span>                (int) (totalStoreFilesSize + stores.get(j).getStoreFileSizeBytes());<a name="line.389"></a>
-<span class="sourceLineNo">390</span>          }<a name="line.390"></a>
-<span class="sourceLineNo">391</span>        } catch (IOException e) {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>          LOG.error("Failed to deserialize bulk load entry from wal edit. "<a name="line.392"></a>
-<span class="sourceLineNo">393</span>              + "Size of HFiles part of cell will not be considered in replication "<a name="line.393"></a>
-<span class="sourceLineNo">394</span>              + "request size calculation.",<a name="line.394"></a>
-<span class="sourceLineNo">395</span>            e);<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>    return totalStoreFilesSize;<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>  /**<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   * @param size delta size for grown buffer<a name="line.403"></a>
-<span class="sourceLineNo">404</span>   * @return true if we should clear buffer and push all<a name="line.404"></a>
-<span class="sourceLineNo">405</span>   */<a name="line.405"></a>
-<span class="sourceLineNo">406</span>  private boolean acquireBufferQuota(long size) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>    long newBufferUsed = totalBufferUsed.addAndGet(size);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    // Record the new buffer usage<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    this.source.getSourceManager().getGlobalMetrics().setWALReaderEditsBufferBytes(newBufferUsed);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    return newBufferUsed &gt;= totalBufferQuota;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>  }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>  /**<a name="line.413"></a>
-<span class="sourceLineNo">414</span>   * @return whether the reader thread is running<a name="line.414"></a>
-<span class="sourceLineNo">415</span>   */<a name="line.415"></a>
-<span class="sourceLineNo">416</span>  public boolean isReaderRunning() {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    return isReaderRunning &amp;&amp; !isInterrupted();<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>  /**<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * @param readerRunning the readerRunning to set<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  public void setReaderRunning(boolean readerRunning) {<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    this.isReaderRunning = readerRunning;<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">324</span><a name="line.324"></a>
+<span class="sourceLineNo">325</span>  private void updateBatchStats(WALEntryBatch batch, Entry entry, long entrySize) {<a name="line.325"></a>
+<span class="sourceLineNo">326</span>    WALEdit edit = entry.getEdit();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    batch.incrementHeapSize(entrySize);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>    Pair&lt;Integer, Integer&gt; nbRowsAndHFiles = countDistinctRowKeysAndHFiles(edit);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>    batch.incrementNbRowKeys(nbRowsAndHFiles.getFirst());<a name="line.329"></a>
+<span class="sourceLineNo">330</span>    batch.incrementNbHFiles(nbRowsAndHFiles.getSecond());<a name="line.330"></a>
+<span class="sourceLineNo">331</span>  }<a name="line.331"></a>
+<span class="sourceLineNo">332</span><a name="line.332"></a>
+<span class="sourceLineNo">333</span>  /**<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * Count the number of different row keys in the given edit because of mini-batching. We assume<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * that there's at least one Cell in the WALEdit.<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   * @param edit edit to count row keys from<a name="line.336"></a>
+<span class="sourceLineNo">337</span>   * @return number of different row keys and HFiles<a name="line.337"></a>
+<span class="sourceLineNo">338</span>   */<a name="line.338"></a>
+<span class="sourceLineNo">339</span>  private Pair&lt;Integer, Integer&gt; countDistinctRowKeysAndHFiles(WALEdit edit) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    int distinctRowKeys = 1;<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    int totalHFileEntries = 0;<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    Cell lastCell = cells.get(0);<a name="line.343"></a>
+<span class="sourceLineNo">344</span><a name="line.344"></a>
+<span class="sourceLineNo">345</span>    int totalCells = edit.size();<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>      // Count HFiles to be replicated<a name="line.347"></a>
+<span class="sourceLineNo">348</span>      if (CellUtil.matchingQualifier(cells.get(i), WALEdit.BULK_LOAD)) {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        try {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>          BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cells.get(i));<a name="line.350"></a>
+<span class="sourceLineNo">351</span>          List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.351"></a>
+<span class="sourceLineNo">352</span>          int totalStores = stores.size();<a name="line.352"></a>
+<span class="sourceLineNo">353</span>          for (int j = 0; j &lt; totalStores; j++) {<a name="line.353"></a>
+<span class="sourceLineNo">354</span>            totalHFileEntries += stores.get(j).getStoreFileList().size();<a name="line.354"></a>
+<span class="sourceLineNo">355</span>          }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>        } catch (IOException e) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>          LOG.error("Failed to deserialize bulk load entry from wal edit. "<a name="line.357"></a>
+<span class="sourceLineNo">358</span>              + "Then its hfiles count will not be added into metric.");<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>      if (!CellUtil.matchingRows(cells.get(i), lastCell)) {<a name="line.362"></a>
+<span class="sourceLineNo">363</span>        distinctRowKeys++;<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      }<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      lastCell = cells.get(i);<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    Pair&lt;Integer, Integer&gt; result = new Pair&lt;&gt;(distinctRowKeys, totalHFileEntries);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return result;<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 name="line.372"></a>
+<span class="sourceLineNo">373</span>   * Calculate the total size of all the store files<a name="line.373"></a>
+<span class="sourceLineNo">374</span>   * @param edit edit to count row keys from<a name="line.374"></a>
+<span class="sourceLineNo">375</span>   * @return the total size of the store files<a name="line.375"></a>
+<span class="sourceLineNo">376</span>   */<a name="line.376"></a>
+<span class="sourceLineNo">377</span>  private int sizeOfStoreFilesIncludeBulkLoad(WALEdit edit) {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    List&lt;Cell&gt; cells = edit.getCells();<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    int totalStoreFilesSize = 0;<a name="line.379"></a>
+<span class="sourceLineNo">380</span><a name="line.380"></a>
+<span class="sourceLineNo">381</span>    int totalCells = edit.size();<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    for (int i = 0; i &lt; totalCells; i++) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      if (CellUtil.matchingQualifier(cells.get(i), WALEdit.BULK_LOAD)) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>        try {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>          BulkLoadDescriptor bld = WALEdit.getBulkLoadDescriptor(cells.get(i));<a name="line.385"></a>
+<span class="sourceLineNo">386</span>          List&lt;StoreDescriptor&gt; stores = bld.getStoresList();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>          int totalStores = stores.size();<a name="line.387"></a>
+<span class="sourceLineNo">388</span>          for (int j = 0; j &lt; totalStores; j++) {<a name="line.388"></a>
+<span class="sourceLineNo">389</span>            totalStoreFilesSize =<a name="line.389"></a>
+<span class="sourceLineNo">390</span>                (int) (totalStoreFilesSize + stores.get(j).getStoreFileSizeBytes());<a name="line.390"></a>
+<span class="sourceLineNo">391</span>          }<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        } catch (IOException e) {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>          LOG.error("Failed to deserialize bulk load entry from wal edit. "<a name="line.393"></a>
+<span class="sourceLineNo">394</span>              + "Size of HFiles part of cell will not be considered in replication "<a name="line.394"></a>
+<span class="sourceLineNo">395</span>              + "request size calculation.",<a name="line.395"></a>
+<span class="sourceLineNo">396</span>            e);<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>    }<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    return totalStoreFilesSize;<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>   * @param size delta size for grown buffer<a name="line.404"></a>
+<span class="sourceLineNo">405</span>   * @return true if we should clear buffer and push all<a name="line.405"></a>
+<span class="sourceLineNo">406</span>   */<a name="line.406"></a>
+<span class="sourceLineNo">407</span>  private boolean acquireBufferQuota(long size) {<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    long newBufferUsed = totalBufferUsed.addAndGet(size);<a name="line.408"></a>
+<span class="sourceLineNo">409</span>    // Record the new buffer usage<a name="line.409"></a>
+<span class="sourceLineNo">410</span>    this.source.getSourceManager().getGlobalMetrics().setWALReaderEditsBufferBytes(newBufferUsed);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    return newBufferUsed &gt;= totalBufferQuota;<a name="line.411"></a>
+<span class="sourceLineNo">412</span>  }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>  /**<a name="line.414"></a>
+<span class="sourceLineNo">415</span>   * @return whether the reader thread is running<a name="line.415"></a>
+<span class="sourceLineNo">416</span>   */<a name="line.416"></a>
+<span class="sourceLineNo">417</span>  public boolean isReaderRunning() {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    return isReaderRunning &amp;&amp; !isInterrupted();<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>  /**<a name="line.421"></a>
+<span class="sourceLineNo">422</span>   * @param readerRunning the readerRunning to set<a name="line.422"></a>
+<span class="sourceLineNo">423</span>   */<a name="line.423"></a>
+<span class="sourceLineNo">424</span>  public void setReaderRunning(boolean readerRunning) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>    this.isReaderRunning = readerRunning;<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>
 
 
 
diff --git a/downloads.html b/downloads.html
index af30c5a..5e55be5 100644
--- a/downloads.html
+++ b/downloads.html
@@ -433,7 +433,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/export_control.html b/export_control.html
index 0e8fcbb..6641011 100644
--- a/export_control.html
+++ b/export_control.html
@@ -197,7 +197,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/index.html b/index.html
index af816a6..48e8ca9 100644
--- a/index.html
+++ b/index.html
@@ -275,7 +275,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/issue-tracking.html b/issue-tracking.html
index 68f3499..344515c 100644
--- a/issue-tracking.html
+++ b/issue-tracking.html
@@ -169,7 +169,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/mail-lists.html b/mail-lists.html
index 395d8b1..8660d65 100644
--- a/mail-lists.html
+++ b/mail-lists.html
@@ -229,7 +229,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/metrics.html b/metrics.html
index 4bdaecc..20d17b0 100644
--- a/metrics.html
+++ b/metrics.html
@@ -325,7 +325,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/old_news.html b/old_news.html
index a51011c..63e798a 100644
--- a/old_news.html
+++ b/old_news.html
@@ -316,7 +316,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugin-management.html b/plugin-management.html
index d21956f..320206b 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -321,7 +321,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/plugins.html b/plugins.html
index 9759bbd..9ba6ee4 100644
--- a/plugins.html
+++ b/plugins.html
@@ -248,7 +248,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index af29569..ef2b923 100644
--- a/poweredbyhbase.html
+++ b/poweredbyhbase.html
@@ -650,7 +650,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-info.html b/project-info.html
index 29e221b..6463cbc 100644
--- a/project-info.html
+++ b/project-info.html
@@ -210,7 +210,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-reports.html b/project-reports.html
index 9014ca6..ba87b2a 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -186,7 +186,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/project-summary.html b/project-summary.html
index 10ca6ac..1265ae9 100644
--- a/project-summary.html
+++ b/project-summary.html
@@ -212,7 +212,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index 8ebc742..3530cd0 100644
--- a/pseudo-distributed.html
+++ b/pseudo-distributed.html
@@ -174,7 +174,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/replication.html b/replication.html
index 636f0dc..eeb6400 100644
--- a/replication.html
+++ b/replication.html
@@ -169,7 +169,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/resources.html b/resources.html
index fb474d4..5005592 100644
--- a/resources.html
+++ b/resources.html
@@ -197,7 +197,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/source-repository.html b/source-repository.html
index ea3ba80..79f9c2c 100644
--- a/source-repository.html
+++ b/source-repository.html
@@ -180,7 +180,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/sponsors.html b/sponsors.html
index 2e26b24..2716a95 100644
--- a/sponsors.html
+++ b/sponsors.html
@@ -199,7 +199,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/supportingprojects.html b/supportingprojects.html
index fc68894..bfd72cc 100644
--- a/supportingprojects.html
+++ b/supportingprojects.html
@@ -390,7 +390,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/team-list.html b/team-list.html
index 3e0c064..d0aaf3d 100644
--- a/team-list.html
+++ b/team-list.html
@@ -701,7 +701,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2020
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-23</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2020-09-24</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index 9096b54..7c7ed2a 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -65745,6 +65745,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/TestPerTableCFReplication.html#testPerTableCFReplication--">testPerTableCFReplication()</a></span> - Method in class org.apache.hadoop.hbase.replication.<a href="org/apache/hadoop/hbase/replication/TestPerTableCFReplication.html" title="class in org.apache.hadoop.hbase.replication">TestPerTableCFReplication</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#testPerTableWALMetrics--">testPerTableWALMetrics()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">TestMetricsWAL</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/TestMetricsUserAggregate.html#testPerUserOperations--">testPerUserOperations()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.<a href="org/apache/hadoop/hbase/regionserver/TestMetricsUserAggregate.html" title="class in org.apache.hadoop.hbase.regionserver">TestMetricsUserAggregate</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.html#testPickers--">testPickers()</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="org/apache/hadoop/hbase/master/balancer/TestFavoredStochasticBalancerPickers.html" title="class in org.apache.hadoop.hbase.master.balancer">TestFavoredStochasticBalancerPickers</a></dt>
@@ -73558,6 +73560,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/hbtop/terminal/impl/TestTerminalPrinter.html#TestTerminalPrinter--">TestTerminalPrinter()</a></span> - Constructor for class org.apache.hadoop.hbase.hbtop.terminal.impl.<a href="org/apache/hadoop/hbase/hbtop/terminal/impl/TestTerminalPrinter.html" title="class in org.apache.hadoop.hbase.hbtop.terminal.impl">TestTerminalPrinter</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#testTerminateClearsBuffer--">testTerminateClearsBuffer()</a></span> - 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>
+<dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/types/TestTerminatedWrapper.html" title="class in org.apache.hadoop.hbase.types"><span class="typeNameLink">TestTerminatedWrapper</span></a> - Class in <a href="org/apache/hadoop/hbase/types/package-summary.html">org.apache.hadoop.hbase.types</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/types/TestTerminatedWrapper.html#TestTerminatedWrapper--">TestTerminatedWrapper()</a></span> - Constructor for class org.apache.hadoop.hbase.types.<a href="org/apache/hadoop/hbase/types/TestTerminatedWrapper.html" title="class in org.apache.hadoop.hbase.types">TestTerminatedWrapper</a></dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
index 0f9f8f3..03b69fa 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -652,18 +652,18 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterManager.ServiceType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterManager.ServiceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleState.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.HealthSummary.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.HealthSummary</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.RoleCommand.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.RoleCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/PerformanceEvaluation.Counter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">PerformanceEvaluation.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestDDLMasterFailover.ACTION</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.Service.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.Service</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ResourceChecker.Phase.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ResourceChecker.Phase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.Signal.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.Signal</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HBaseClusterManager.CommandProvider.Operation.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.Stat.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/RESTApiClusterManager.HealthSummary.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">RESTApiClusterManager.HealthSummary</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ScanPerformanceEvaluation.ScanCounter</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 6094dd7..180fd43 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -241,10 +241,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.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureBypass.StuckStateMachineState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureBypass.StuckStateMachineState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestProcedureRecovery.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestProcedureRecovery.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestYieldProcedures.TestStateMachineProcedure.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestYieldProcedures.TestStateMachineProcedure.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/TestStateMachineProcedure.TestSMProcedureState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">TestStateMachineProcedure.TestSMProcedureState</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 4d42f37..59660f0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -707,10 +707,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.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestAtomicOperation.TestStep.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestAtomicOperation.TestStep</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DataBlockEncodingTool.Manipulation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestRegionServerReadRequestMetrics.Metric.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestRegionServerReadRequestMetrics.Metric</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestMultiLogThreshold.ActionType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestMultiLogThreshold.ActionType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html
index 2e82266..88d70ff 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
+var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10};
 var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -109,7 +109,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.34">TestMetricsWAL</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.39">TestMetricsWAL</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>
@@ -171,14 +171,18 @@
 </tr>
 <tr id="i1" class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#testPostSync--">testPostSync</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#testPerTableWALMetrics--">testPerTableWALMetrics</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#testSlowAppend--">testSlowAppend</a></span>()</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#testPostSync--">testPostSync</a></span>()</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#testSlowAppend--">testSlowAppend</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i4" class="altColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#testWalWrittenInBytes--">testWalWrittenInBytes</a></span>()</code>&nbsp;</td>
 </tr>
 </table>
@@ -209,7 +213,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.37">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.42">CLASS_RULE</a></pre>
 </li>
 </ul>
 </li>
@@ -226,7 +230,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestMetricsWAL</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.34">TestMetricsWAL</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.39">TestMetricsWAL</a>()</pre>
 </li>
 </ul>
 </li>
@@ -243,7 +247,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testLogRollRequested</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.41">testLogRollRequested</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.46">testLogRollRequested</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -257,7 +261,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testPostSync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.62">testPostSync</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.67">testPostSync</a>()
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -271,7 +275,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testSlowAppend</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.71">testSlowAppend</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.76">testSlowAppend</a>()
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -282,10 +286,10 @@
 <a name="testWalWrittenInBytes--">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testWalWrittenInBytes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.83">testWalWrittenInBytes</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.90">testWalWrittenInBytes</a>()
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -293,6 +297,20 @@
 </dl>
 </li>
 </ul>
+<a name="testPerTableWALMetrics--">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testPerTableWALMetrics</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html#line.102">testPerTableWALMetrics</a>()
+                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><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></code></dd>
+</dl>
+</li>
+</ul>
 </li>
 </ul>
 </li>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html
index 38b350a..295bdac 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html
@@ -141,7 +141,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.370">TestReplicationSource.DoNothingReplicationEndpoint</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.414">TestReplicationSource.DoNothingReplicationEndpoint</a>
 extends org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</pre>
 <div class="block">Deadend Endpoint. Does nothing.</div>
 </li>
@@ -335,7 +335,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>uuid</h4>
-<pre>private final&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/TestReplicationSource.DoNothingReplicationEndpoint.html#line.371">uuid</a></pre>
+<pre>private final&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/TestReplicationSource.DoNothingReplicationEndpoint.html#line.415">uuid</a></pre>
 </li>
 </ul>
 </li>
@@ -352,7 +352,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>DoNothingReplicationEndpoint</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.370">DoNothingReplicationEndpoint</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.414">DoNothingReplicationEndpoint</a>()</pre>
 </li>
 </ul>
 </li>
@@ -369,7 +369,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.373">init</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.Context&nbsp;context)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.417">init</a>(org.apache.hadoop.hbase.replication.ReplicationEndpoint.Context&nbsp;context)
           throws <a href="https://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>
@@ -387,7 +387,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALEntryfilter</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.replication.WALEntryFilter&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.377">getWALEntryfilter</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.replication.WALEntryFilter&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.421">getWALEntryfilter</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getWALEntryfilter</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
@@ -402,7 +402,7 @@
 <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/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.381">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/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.425">getPeerUUID</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getPeerUUID</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
@@ -417,7 +417,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>doStart</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.386">doStart</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.430">doStart</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>doStart</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint</code></dd>
@@ -430,7 +430,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>doStop</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.391">doStop</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.435">doStop</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>doStop</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.replication.regionserver.HBaseInterClusterReplicationEndpoint</code></dd>
@@ -443,7 +443,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>canReplicateToSameCluster</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.395">canReplicateToSameCluster</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html#line.439">canReplicateToSameCluster</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>canReplicateToSameCluster</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html
index c090472..281c3b0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html
@@ -142,7 +142,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.403">TestReplicationSource.FaultyReplicationEndpoint</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.447">TestReplicationSource.FaultyReplicationEndpoint</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSource.DoNothingReplicationEndpoint</a></pre>
 <div class="block">Deadend Endpoint. Does nothing.</div>
 </li>
@@ -323,7 +323,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>count</h4>
-<pre>static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html#line.405">count</a></pre>
+<pre>static&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html#line.449">count</a></pre>
 </li>
 </ul>
 </li>
@@ -340,7 +340,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FaultyReplicationEndpoint</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html#line.403">FaultyReplicationEndpoint</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html#line.447">FaultyReplicationEndpoint</a>()</pre>
 </li>
 </ul>
 </li>
@@ -357,7 +357,7 @@
 <ul class="blockListLast">
 <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/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html#line.408">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/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html#line.452">getPeerUUID</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>getPeerUUID</code>&nbsp;in interface&nbsp;<code>org.apache.hadoop.hbase.replication.ReplicationEndpoint</code></dd>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html
index e4c3cbf..e0c5152 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html
@@ -127,7 +127,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.348">TestReplicationSource.ShutdownDelayRegionServer</a>
+<pre>public static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.392">TestReplicationSource.ShutdownDelayRegionServer</a>
 extends org.apache.hadoop.hbase.regionserver.HRegionServer</pre>
 <div class="block">Regionserver implementation that adds a delay on the graceful shutdown.</div>
 </li>
@@ -262,7 +262,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ShutdownDelayRegionServer</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html#line.349">ShutdownDelayRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html#line.393">ShutdownDelayRegionServer</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)
                           throws <a href="https://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>
@@ -284,7 +284,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>stopServiceThreads</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html#line.354">stopServiceThreads</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html#line.398">stopServiceThreads</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code>stopServiceThreads</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.regionserver.HRegionServer</code></dd>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html
index 91b9b26..ea84b64 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10};
+var methods = {"i0":9,"i1":9,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":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";
@@ -109,7 +109,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.75">TestReplicationSource</a>
+<pre>public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.78">TestReplicationSource</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>
@@ -276,12 +276,16 @@
 </tr>
 <tr id="i8" class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#testTerminateClearsBuffer--">testTerminateClearsBuffer</a></span>()</code>&nbsp;</td>
+</tr>
+<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/replication/regionserver/TestReplicationSource.html#testTerminateTimeout--">testTerminateTimeout</a></span>()</code>
 <div class="block">Tests that <code>ReplicationSource.terminate(String)</code> will timeout properly
  Moved here from TestReplicationSource because doesn't need cluster.</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/replication/regionserver/TestReplicationSource.html#testWALEntryFilter--">testWALEntryFilter</a></span>()</code>
 <div class="block">Test that we filter out meta edits, etc.</div>
@@ -315,7 +319,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>CLASS_RULE</h4>
-<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.78">CLASS_RULE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseClassTestRule.html" title="class in org.apache.hadoop.hbase">HBaseClassTestRule</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.81">CLASS_RULE</a></pre>
 </li>
 </ul>
 <a name="LOG">
@@ -324,7 +328,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.81">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.84">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -333,7 +337,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.83">TEST_UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.86">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL_PEER">
@@ -342,7 +346,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL_PEER</h4>
-<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.85">TEST_UTIL_PEER</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.88">TEST_UTIL_PEER</a></pre>
 </li>
 </ul>
 <a name="FS">
@@ -351,7 +355,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>FS</h4>
-<pre>private static&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.87">FS</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.90">FS</a></pre>
 </li>
 </ul>
 <a name="oldLogDir">
@@ -360,7 +364,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>oldLogDir</h4>
-<pre>private static&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.88">oldLogDir</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.91">oldLogDir</a></pre>
 </li>
 </ul>
 <a name="logDir">
@@ -369,7 +373,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>logDir</h4>
-<pre>private static&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.89">logDir</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.92">logDir</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -378,7 +382,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.90">conf</a></pre>
+<pre>private static&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.93">conf</a></pre>
 </li>
 </ul>
 </li>
@@ -395,7 +399,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestReplicationSource</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.75">TestReplicationSource</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.78">TestReplicationSource</a>()</pre>
 </li>
 </ul>
 </li>
@@ -412,7 +416,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.93">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.96">setUpBeforeClass</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -426,7 +430,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.108">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.111">tearDownAfterClass</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -440,7 +444,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testDefaultSkipsMetaWAL</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.118">testDefaultSkipsMetaWAL</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.121">testDefaultSkipsMetaWAL</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">Test the default ReplicationSource skips queuing hbase:meta WAL files.</div>
 <dl>
@@ -455,7 +459,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testWALEntryFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.154">testWALEntryFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.157">testWALEntryFilter</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">Test that we filter out meta edits, etc.</div>
 <dl>
@@ -470,7 +474,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testLogMoving</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.204">testLogMoving</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.207">testLogMoving</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Sanity check that we can move logs around while we are reading
  from them. Should this test fail, ReplicationSource would have a hard
@@ -487,7 +491,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testTerminateTimeout</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.248">testTerminateTimeout</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.251">testTerminateTimeout</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests that <code>ReplicationSource.terminate(String)</code> will timeout properly
  Moved here from TestReplicationSource because doesn't need cluster.</div>
@@ -497,13 +501,27 @@
 </dl>
 </li>
 </ul>
+<a name="testTerminateClearsBuffer--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testTerminateClearsBuffer</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.276">testTerminateClearsBuffer</a>()
+                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl>
+<dt><span class="throwsLabel">Throws:</span></dt>
+<dd><code><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></code></dd>
+</dl>
+</li>
+</ul>
 <a name="testServerShutdownRecoveredQueue--">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>testServerShutdownRecoveredQueue</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.277">testServerShutdownRecoveredQueue</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.321">testServerShutdownRecoveredQueue</a>()
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Tests that recovered queues are preserved on a regionserver shutdown.
  See HBASE-18192</div>
@@ -519,7 +537,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testRecoveredReplicationSourceShipperGetPosition</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.424">testRecoveredReplicationSourceShipperGetPosition</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.468">testRecoveredReplicationSourceShipperGetPosition</a>()
                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Test HBASE-20497
  Moved here from TestReplicationSource because doesn't need cluster.</div>
@@ -535,7 +553,7 @@
 <ul class="blockList">
 <li class="blockList">
 <h4>testAbortFalseOnError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.452">testAbortFalseOnError</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.496">testAbortFalseOnError</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">Test ReplicationSource retries startup once an uncaught exception happens
  during initialization and <b>eplication.source.regionserver.abort</b> is set to false.</div>
@@ -551,7 +569,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testAbortTrueOnError</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.490">testAbortTrueOnError</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html#line.534">testAbortTrueOnError</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">Test ReplicationSource retries startup once an uncaught exception happens
  during initialization and <b>replication.source.regionserver.abort</b> is set to false.</div>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
index f86114f..6de3c68 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/test/package-tree.html
@@ -253,10 +253,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.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestWithCellVisibilityLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestWithCellVisibilityLoadAndVerify.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Generator.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Generator.Counts</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestBigLinkedList.Verify.Counts.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestBigLinkedList.Verify.Counts</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.test.<a href="../../../../../org/apache/hadoop/hbase/test/IntegrationTestLoadAndVerify.Counters.html" title="enum in org.apache.hadoop.hbase.test"><span class="typeNameLink">IntegrationTestLoadAndVerify.Counters</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 99293a5..317d817 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -165,8 +165,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.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/TestWALSplit.Corruptions.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">TestWALSplit.Corruptions</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/IOTestProvider.AllowedOperations.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">IOTestProvider.AllowedOperations</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/FaultyFSLog.FailureType.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">FaultyFSLog.FailureType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html
index 5d925aa..5e9dbd4 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/TestMetricsWAL.html
@@ -6,7 +6,7 @@
 </head>
 <body>
 <div class="sourceContainer">
-<pre><span class="sourceLineNo">001</span>/**<a name="line.1"></a>
+<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>
@@ -30,74 +30,114 @@
 <span class="sourceLineNo">022</span>import static org.mockito.Mockito.times;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.mockito.Mockito.verify;<a name="line.23"></a>
 <span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.util.concurrent.TimeUnit;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.junit.ClassRule;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.junit.Test;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.junit.experimental.categories.Category;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>@Category({MiscTests.class, SmallTests.class})<a name="line.33"></a>
-<span class="sourceLineNo">034</span>public class TestMetricsWAL {<a name="line.34"></a>
-<span class="sourceLineNo">035</span><a name="line.35"></a>
-<span class="sourceLineNo">036</span>  @ClassRule<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.37"></a>
-<span class="sourceLineNo">038</span>      HBaseClassTestRule.forClass(TestMetricsWAL.class);<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>  @Test<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  public void testLogRollRequested() throws Exception {<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    MetricsWALSource source = mock(MetricsWALSourceImpl.class);<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    MetricsWAL metricsWAL = new MetricsWAL(source);<a name="line.43"></a>
-<span class="sourceLineNo">044</span>    metricsWAL.logRollRequested(WALActionsListener.RollRequestReason.ERROR);<a name="line.44"></a>
-<span class="sourceLineNo">045</span>    metricsWAL.logRollRequested(WALActionsListener.RollRequestReason.LOW_REPLICATION);<a name="line.45"></a>
-<span class="sourceLineNo">046</span>    metricsWAL.logRollRequested(WALActionsListener.RollRequestReason.SLOW_SYNC);<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    metricsWAL.logRollRequested(WALActionsListener.RollRequestReason.SIZE);<a name="line.47"></a>
-<span class="sourceLineNo">048</span><a name="line.48"></a>
-<span class="sourceLineNo">049</span>    // Log roll was requested four times<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    verify(source, times(4)).incrementLogRollRequested();<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    // One was because of an IO error.<a name="line.51"></a>
-<span class="sourceLineNo">052</span>    verify(source, times(1)).incrementErrorLogRoll();<a name="line.52"></a>
-<span class="sourceLineNo">053</span>    // One was because of low replication on the hlog.<a name="line.53"></a>
-<span class="sourceLineNo">054</span>    verify(source, times(1)).incrementLowReplicationLogRoll();<a name="line.54"></a>
-<span class="sourceLineNo">055</span>    // One was because of slow sync on the hlog.<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    verify(source, times(1)).incrementSlowSyncLogRoll();<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    // One was because of hlog file length limit.<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    verify(source, times(1)).incrementSizeLogRoll();<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  }<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  @Test<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  public void testPostSync() throws Exception {<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    long nanos = TimeUnit.MILLISECONDS.toNanos(145);<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    MetricsWALSource source = mock(MetricsWALSourceImpl.class);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    MetricsWAL metricsWAL = new MetricsWAL(source);<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    metricsWAL.postSync(nanos, 1);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    verify(source, times(1)).incrementSyncTime(145);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @Test<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public void testSlowAppend() throws Exception {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    MetricsWALSource source = new MetricsWALSourceImpl();<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    MetricsWAL metricsWAL = new MetricsWAL(source);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    // One not so slow append (&lt; 1000)<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    metricsWAL.postAppend(1, 900, null, null);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    // Two slow appends (&gt; 1000)<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    metricsWAL.postAppend(1, 1010, null, null);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    metricsWAL.postAppend(1, 2000, null, null);<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    assertEquals(2, source.getSlowAppendCount());<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>  @Test<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  public void testWalWrittenInBytes() throws Exception {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    MetricsWALSource source = mock(MetricsWALSourceImpl.class);<a name="line.84"></a>
-<span class="sourceLineNo">085</span>    MetricsWAL metricsWAL = new MetricsWAL(source);<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    metricsWAL.postAppend(100, 900, null, null);<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    metricsWAL.postAppend(200, 2000, null, null);<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    verify(source, times(1)).incrementWrittenBytes(100);<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    verify(source, times(1)).incrementWrittenBytes(200);<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">025</span>import java.util.concurrent.CountDownLatch;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import java.util.concurrent.TimeUnit;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.TableName;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.MiscTests;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.wal.WALKey;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.metrics2.lib.DynamicMetricsRegistry;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.junit.ClassRule;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.Test;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.experimental.categories.Category;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>@Category({MiscTests.class, SmallTests.class})<a name="line.38"></a>
+<span class="sourceLineNo">039</span>public class TestMetricsWAL {<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>  @ClassRule<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.42"></a>
+<span class="sourceLineNo">043</span>      HBaseClassTestRule.forClass(TestMetricsWAL.class);<a name="line.43"></a>
+<span class="sourceLineNo">044</span><a name="line.44"></a>
+<span class="sourceLineNo">045</span>  @Test<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  public void testLogRollRequested() throws Exception {<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    MetricsWALSource source = mock(MetricsWALSourceImpl.class);<a name="line.47"></a>
+<span class="sourceLineNo">048</span>    MetricsWAL metricsWAL = new MetricsWAL(source);<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    metricsWAL.logRollRequested(WALActionsListener.RollRequestReason.ERROR);<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    metricsWAL.logRollRequested(WALActionsListener.RollRequestReason.LOW_REPLICATION);<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    metricsWAL.logRollRequested(WALActionsListener.RollRequestReason.SLOW_SYNC);<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    metricsWAL.logRollRequested(WALActionsListener.RollRequestReason.SIZE);<a name="line.52"></a>
+<span class="sourceLineNo">053</span><a name="line.53"></a>
+<span class="sourceLineNo">054</span>    // Log roll was requested four times<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    verify(source, times(4)).incrementLogRollRequested();<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    // One was because of an IO error.<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    verify(source, times(1)).incrementErrorLogRoll();<a name="line.57"></a>
+<span class="sourceLineNo">058</span>    // One was because of low replication on the hlog.<a name="line.58"></a>
+<span class="sourceLineNo">059</span>    verify(source, times(1)).incrementLowReplicationLogRoll();<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    // One was because of slow sync on the hlog.<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    verify(source, times(1)).incrementSlowSyncLogRoll();<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    // One was because of hlog file length limit.<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    verify(source, times(1)).incrementSizeLogRoll();<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>  @Test<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public void testPostSync() throws Exception {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    long nanos = TimeUnit.MILLISECONDS.toNanos(145);<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    MetricsWALSource source = mock(MetricsWALSourceImpl.class);<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    MetricsWAL metricsWAL = new MetricsWAL(source);<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    metricsWAL.postSync(nanos, 1);<a name="line.71"></a>
+<span class="sourceLineNo">072</span>    verify(source, times(1)).incrementSyncTime(145);<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>  @Test<a name="line.75"></a>
+<span class="sourceLineNo">076</span>  public void testSlowAppend() throws Exception {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    MetricsWALSource source = new MetricsWALSourceImpl();<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    MetricsWAL metricsWAL = new MetricsWAL(source);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    TableName tableName = TableName.valueOf("foo");<a name="line.79"></a>
+<span class="sourceLineNo">080</span>    WALKey walKey = new WALKeyImpl(null, tableName, -1);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>    // One not so slow append (&lt; 1000)<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    metricsWAL.postAppend(1, 900, walKey, null);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>    // Two slow appends (&gt; 1000)<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    metricsWAL.postAppend(1, 1010, walKey, null);<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    metricsWAL.postAppend(1, 2000, walKey, null);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    assertEquals(2, source.getSlowAppendCount());<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>  @Test<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  public void testWalWrittenInBytes() throws Exception {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    MetricsWALSource source = mock(MetricsWALSourceImpl.class);<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    MetricsWAL metricsWAL = new MetricsWAL(source);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    TableName tableName = TableName.valueOf("foo");<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    WALKey walKey = new WALKeyImpl(null, tableName, -1);<a name="line.94"></a>
+<span class="sourceLineNo">095</span>    metricsWAL.postAppend(100, 900, walKey, null);<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    metricsWAL.postAppend(200, 2000, walKey, null);<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    verify(source, times(1)).incrementWrittenBytes(100);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    verify(source, times(1)).incrementWrittenBytes(200);<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>  @Test<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  public void testPerTableWALMetrics() throws Exception {<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    MetricsWALSourceImpl source = new MetricsWALSourceImpl("foo", "foo", "foo", "foo");<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    final int numThreads = 10;<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    final int numIters = 10;<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    CountDownLatch latch = new CountDownLatch(numThreads);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    for (int i = 0; i &lt; numThreads; i++) {<a name="line.107"></a>
+<span class="sourceLineNo">108</span>      final TableName tableName = TableName.valueOf("tab_" + i);<a name="line.108"></a>
+<span class="sourceLineNo">109</span>      long size = i;<a name="line.109"></a>
+<span class="sourceLineNo">110</span>      new Thread(() -&gt; {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>        for (int j = 0; j &lt; numIters; j++) {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>          source.incrementAppendCount(tableName);<a name="line.112"></a>
+<span class="sourceLineNo">113</span>          source.incrementAppendSize(tableName, size);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>        }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        latch.countDown();<a name="line.115"></a>
+<span class="sourceLineNo">116</span>      }).start();<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    }<a name="line.117"></a>
+<span class="sourceLineNo">118</span>    // Wait for threads to finish.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>    latch.await();<a name="line.119"></a>
+<span class="sourceLineNo">120</span>    DynamicMetricsRegistry registry = source.getMetricsRegistry();<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    // Validate the metrics<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    for (int i = 0; i &lt; numThreads; i++) {<a name="line.122"></a>
+<span class="sourceLineNo">123</span>      TableName tableName = TableName.valueOf("tab_" + i);<a name="line.123"></a>
+<span class="sourceLineNo">124</span>      long tableAppendCount =<a name="line.124"></a>
+<span class="sourceLineNo">125</span>          registry.getCounter(tableName + "." + MetricsWALSource.APPEND_COUNT, -1).value();<a name="line.125"></a>
+<span class="sourceLineNo">126</span>      assertEquals(numIters, tableAppendCount);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      long tableAppendSize =<a name="line.127"></a>
+<span class="sourceLineNo">128</span>          registry.getCounter(tableName + "." + MetricsWALSource.APPEND_SIZE, -1).value();<a name="line.128"></a>
+<span class="sourceLineNo">129</span>      assertEquals(i * numIters, tableAppendSize);<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>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html
index 8db2bac..2e672b7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.DoNothingReplicationEndpoint.html
@@ -30,501 +30,545 @@
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertNotNull;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertNull;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.OptionalLong;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.ExecutorService;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.Executors;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Future;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellBuilderFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CellBuilderType;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.Server;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Waiter;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.WALEntryFilter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.AfterClass;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.junit.BeforeClass;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.junit.ClassRule;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.junit.Test;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.experimental.categories.Category;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.mockito.Mockito;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>@Category({ReplicationTests.class, MediumTests.class})<a name="line.74"></a>
-<span class="sourceLineNo">075</span>public class TestReplicationSource {<a name="line.75"></a>
+<span class="sourceLineNo">025</span>import static org.mockito.Mockito.mock;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.mockito.Mockito.when;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.io.IOException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.OptionalLong;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.UUID;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ExecutorService;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Executors;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.Future;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FileSystem;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.Path;<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.CellBuilderFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.CellBuilderType;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<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.KeyValue;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Server;<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.Waiter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.replication.WALEntryFilter;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.AfterClass;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.BeforeClass;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.ClassRule;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.junit.Test;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.junit.experimental.categories.Category;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.mockito.Mockito;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.slf4j.Logger;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.slf4j.LoggerFactory;<a name="line.75"></a>
 <span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @ClassRule<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      HBaseClassTestRule.forClass(TestReplicationSource.class);<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private static final Logger LOG =<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      LoggerFactory.getLogger(TestReplicationSource.class);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final static HBaseTestingUtility TEST_UTIL =<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      new HBaseTestingUtility();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final static HBaseTestingUtility TEST_UTIL_PEER =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      new HBaseTestingUtility();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static FileSystem FS;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private static Path oldLogDir;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static Path logDir;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @BeforeClass<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static void setUpBeforeClass() throws Exception {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    FS = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    Path rootDir = TEST_UTIL.createRootDir();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    if (FS.exists(oldLogDir)) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      FS.delete(oldLogDir, true);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (FS.exists(logDir)) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      FS.delete(logDir, 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>  @AfterClass<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public static void tearDownAfterClass() throws Exception {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    TEST_UTIL_PEER.shutdownMiniHBaseCluster();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    TEST_UTIL.shutdownMiniDFSCluster();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Test the default ReplicationSource skips queuing hbase:meta WAL files.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  @Test<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void testDefaultSkipsMetaWAL() throws IOException {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    ReplicationSource rs = new ReplicationSource();<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    String queueId = "qid";<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    RegionServerServices rss =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    try {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      rs.startup();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      assertTrue(rs.isSourceActive());<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      rs.enqueueLog(new Path("a.1"));<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    } finally {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      rs.terminate("Done");<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      rss.stop("Done");<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>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Test that we filter out meta edits, etc.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testWALEntryFilter() throws IOException {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // To get the fully constructed default WALEntryFilter, need to create a ReplicationSource<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    // instance and init it.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    ReplicationSource rs = new ReplicationSource();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    UUID uuid = UUID.randomUUID();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    String queueId = "qid";<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    RegionServerServices rss =<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId,<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      uuid, p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    try {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      rs.startup();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      TEST_UTIL.waitFor(30000, () -&gt; rs.getWalEntryFilter() != null);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      WALEntryFilter wef = rs.getWalEntryFilter();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // Test non-system WAL edit.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      WALEdit we = new WALEdit().add(CellBuilderFactory.create(CellBuilderType.DEEP_COPY).<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        setRow(HConstants.EMPTY_START_ROW).<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        setFamily(HConstants.CATALOG_FAMILY).<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        setType(Cell.Type.Put).build());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      WAL.Entry e = new WAL.Entry(new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY,<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        TableName.valueOf("test"), -1, -1, uuid), we);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      assertTrue(wef.filter(e) == e);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // Test system WAL edit.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      e = new WAL.Entry(<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY, TableName.META_TABLE_NAME, -1, -1, uuid),<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          we);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      assertNull(wef.filter(e));<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    } finally {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      rs.terminate("Done");<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      rss.stop("Done");<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>   * Sanity check that we can move logs around while we are reading<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * from them. Should this test fail, ReplicationSource would have a hard<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * time reading logs that are being archived.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // This tests doesn't belong in here... it is not about ReplicationSource.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public void testLogMoving() throws Exception{<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    Path logPath = new Path(logDir, "log");<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (!FS.exists(logDir)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      FS.mkdirs(logDir);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (!FS.exists(oldLogDir)) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      FS.mkdirs(oldLogDir);<a name="line.210"></a>
+<span class="sourceLineNo">077</span>@Category({ReplicationTests.class, MediumTests.class})<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public class TestReplicationSource {<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @ClassRule<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      HBaseClassTestRule.forClass(TestReplicationSource.class);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private static final Logger LOG =<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      LoggerFactory.getLogger(TestReplicationSource.class);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final static HBaseTestingUtility TEST_UTIL =<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      new HBaseTestingUtility();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final static HBaseTestingUtility TEST_UTIL_PEER =<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      new HBaseTestingUtility();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private static FileSystem FS;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static Path oldLogDir;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private static Path logDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @BeforeClass<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public static void setUpBeforeClass() throws Exception {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    FS = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    Path rootDir = TEST_UTIL.createRootDir();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    if (FS.exists(oldLogDir)) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      FS.delete(oldLogDir, true);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    if (FS.exists(logDir)) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      FS.delete(logDir, true);<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>  @AfterClass<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static void tearDownAfterClass() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    TEST_UTIL_PEER.shutdownMiniHBaseCluster();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    TEST_UTIL.shutdownMiniDFSCluster();<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>   * Test the default ReplicationSource skips queuing hbase:meta WAL files.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public void testDefaultSkipsMetaWAL() throws IOException {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    ReplicationSource rs = new ReplicationSource();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    String queueId = "qid";<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    RegionServerServices rss =<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    try {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      rs.startup();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      assertTrue(rs.isSourceActive());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      rs.enqueueLog(new Path("a.1"));<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } finally {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      rs.terminate("Done");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      rss.stop("Done");<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * Test that we filter out meta edits, etc.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  @Test<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public void testWALEntryFilter() throws IOException {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    // To get the fully constructed default WALEntryFilter, need to create a ReplicationSource<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // instance and init it.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ReplicationSource rs = new ReplicationSource();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    UUID uuid = UUID.randomUUID();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    String queueId = "qid";<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    RegionServerServices rss =<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId,<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      uuid, p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      rs.startup();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      TEST_UTIL.waitFor(30000, () -&gt; rs.getWalEntryFilter() != null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      WALEntryFilter wef = rs.getWalEntryFilter();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      // Test non-system WAL edit.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      WALEdit we = new WALEdit().add(CellBuilderFactory.create(CellBuilderType.DEEP_COPY).<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        setRow(HConstants.EMPTY_START_ROW).<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        setFamily(HConstants.CATALOG_FAMILY).<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        setType(Cell.Type.Put).build());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      WAL.Entry e = new WAL.Entry(new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY,<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        TableName.valueOf("test"), -1, -1, uuid), we);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      assertTrue(wef.filter(e) == e);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // Test system WAL edit.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      e = new WAL.Entry(<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY, TableName.META_TABLE_NAME, -1, -1, uuid),<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          we);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      assertNull(wef.filter(e));<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    } finally {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      rs.terminate("Done");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      rss.stop("Done");<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><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * Sanity check that we can move logs around while we are reading<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * from them. Should this test fail, ReplicationSource would have a hard<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * time reading logs that are being archived.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  // This tests doesn't belong in here... it is not about ReplicationSource.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  @Test<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public void testLogMoving() throws Exception{<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    Path logPath = new Path(logDir, "log");<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!FS.exists(logDir)) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      FS.mkdirs(logDir);<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    WALProvider.Writer writer = WALFactory.createWALWriter(FS, logPath,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        TEST_UTIL.getConfiguration());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for(int i = 0; i &lt; 3; i++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      byte[] b = Bytes.toBytes(Integer.toString(i));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      KeyValue kv = new KeyValue(b,b,b);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      WALEdit edit = new WALEdit();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      edit.add(kv);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      WALKeyImpl key = new WALKeyImpl(b, TableName.valueOf(b), 0, 0,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          HConstants.DEFAULT_CLUSTER_ID);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      writer.append(new WAL.Entry(key, edit));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      writer.sync(false);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    writer.close();<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>    WAL.Reader reader = WALFactory.createReader(FS, logPath, TEST_UTIL.getConfiguration());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    WAL.Entry entry = reader.next();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertNotNull(entry);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>    Path oldLogPath = new Path(oldLogDir, "log");<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    FS.rename(logPath, oldLogPath);<a name="line.231"></a>
+<span class="sourceLineNo">212</span>    if (!FS.exists(oldLogDir)) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      FS.mkdirs(oldLogDir);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    WALProvider.Writer writer = WALFactory.createWALWriter(FS, logPath,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        TEST_UTIL.getConfiguration());<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(int i = 0; i &lt; 3; i++) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      byte[] b = Bytes.toBytes(Integer.toString(i));<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      KeyValue kv = new KeyValue(b,b,b);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      WALEdit edit = new WALEdit();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      edit.add(kv);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      WALKeyImpl key = new WALKeyImpl(b, TableName.valueOf(b), 0, 0,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          HConstants.DEFAULT_CLUSTER_ID);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      writer.append(new WAL.Entry(key, edit));<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      writer.sync(false);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    writer.close();<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>    WAL.Reader reader = WALFactory.createReader(FS, logPath, TEST_UTIL.getConfiguration());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    WAL.Entry entry = reader.next();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertNotNull(entry);<a name="line.231"></a>
 <span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    entry = reader.next();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    assertNotNull(entry);<a name="line.234"></a>
+<span class="sourceLineNo">233</span>    Path oldLogPath = new Path(oldLogDir, "log");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    FS.rename(logPath, oldLogPath);<a name="line.234"></a>
 <span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    reader.next();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    entry = reader.next();<a name="line.237"></a>
+<span class="sourceLineNo">236</span>    entry = reader.next();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    assertNotNull(entry);<a name="line.237"></a>
 <span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertNull(entry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    reader.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>   * Tests that {@link ReplicationSource#terminate(String)} will timeout properly<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Test<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void testTerminateTimeout() throws Exception {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    ReplicationSource source = new ReplicationSource();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    ReplicationEndpoint<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      replicationEndpoint = new DoNothingReplicationEndpoint();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    try {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      replicationEndpoint.start();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      Configuration testConf = HBaseConfiguration.create();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      testConf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      source.init(testConf, null, manager, null, mockPeer, null, "testPeer",<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        null, p -&gt; OptionalLong.empty(), null);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      ExecutorService executor = Executors.newSingleThreadExecutor();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      Future&lt;?&gt; future = executor.submit(<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        () -&gt; source.terminate("testing source termination"));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      long sleepForRetries = testConf.getLong("replication.source.sleepforretries", 1000);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      Waiter.waitFor(testConf, sleepForRetries * 2, (Waiter.Predicate&lt;Exception&gt;) future::isDone);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    } finally {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      replicationEndpoint.stop();<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><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * Tests that recovered queues are preserved on a regionserver shutdown.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * See HBASE-18192<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @Test<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  public void testServerShutdownRecoveredQueue() throws Exception {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // Ensure single-threaded WAL<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      conf.set("hbase.wal.provider", "defaultProvider");<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      conf.setInt("replication.sleep.before.failover", 2000);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // Introduces a delay in regionserver shutdown to give the race condition a chance to kick in.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      conf.set(HConstants.REGION_SERVER_IMPL, ShutdownDelayRegionServer.class.getName());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster(2);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      TEST_UTIL_PEER.startMiniCluster(1);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      HRegionServer serverA = cluster.getRegionServer(0);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      final ReplicationSourceManager managerA =<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          serverA.getReplicationSourceService().getReplicationManager();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      HRegionServer serverB = cluster.getRegionServer(1);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      final ReplicationSourceManager managerB =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          serverB.getReplicationSourceService().getReplicationManager();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      final Admin admin = TEST_UTIL.getAdmin();<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>      final String peerId = "TestPeer";<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      admin.addReplicationPeer(peerId,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        ReplicationPeerConfig.newBuilder().setClusterKey(TEST_UTIL_PEER.getClusterKey()).build());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Wait for replication sources to come up<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        @Override public boolean evaluate() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          return !(managerA.getSources().isEmpty() || managerB.getSources().isEmpty());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      });<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      // Disabling peer makes sure there is at least one log to claim when the server dies<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      // The recovered queue will also stay there until the peer is disabled even if the<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // WALs it contains have no data.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      admin.disableReplicationPeer(peerId);<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>      // Stopping serverA<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // It's queues should be claimed by the only other alive server i.e. serverB<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      cluster.stopRegionServer(serverA.getServerName());<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        @Override public boolean evaluate() throws Exception {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          return managerB.getOldSources().size() == 1;<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><a name="line.317"></a>
-<span class="sourceLineNo">318</span>      final HRegionServer serverC = cluster.startRegionServer().getRegionServer();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      serverC.waitForServerOnline();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        @Override public boolean evaluate() throws Exception {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          return serverC.getReplicationSourceService() != null;<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>      final ReplicationSourceManager managerC =<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          ((Replication) serverC.getReplicationSourceService()).getReplicationManager();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Sanity check<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      assertEquals(0, managerC.getOldSources().size());<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // Stopping serverB<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      // Now serverC should have two recovered queues:<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      // 1. The serverB's normal queue<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      // 2. serverA's recovered queue on serverB<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      cluster.stopRegionServer(serverB.getServerName());<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      Waiter.waitFor(conf, 20000,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 2);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      admin.enableReplicationPeer(peerId);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      Waiter.waitFor(conf, 20000,<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 0);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      conf.set(HConstants.REGION_SERVER_IMPL, HRegionServer.class.getName());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Regionserver implementation that adds a delay on the graceful shutdown.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public static class ShutdownDelayRegionServer extends HRegionServer {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    public ShutdownDelayRegionServer(Configuration conf) throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">239</span>    reader.next();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    entry = reader.next();<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertNull(entry);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    reader.close();<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>   * Tests that {@link ReplicationSource#terminate(String)} will timeout properly<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  @Test<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  public void testTerminateTimeout() throws Exception {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    ReplicationSource source = new ReplicationSource();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    ReplicationEndpoint<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      replicationEndpoint = new DoNothingReplicationEndpoint();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    try {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      replicationEndpoint.start();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      Configuration testConf = HBaseConfiguration.create();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      testConf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      source.init(testConf, null, manager, null, mockPeer, null, "testPeer",<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        null, p -&gt; OptionalLong.empty(), null);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      ExecutorService executor = Executors.newSingleThreadExecutor();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      Future&lt;?&gt; future = executor.submit(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        () -&gt; source.terminate("testing source termination"));<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      long sleepForRetries = testConf.getLong("replication.source.sleepforretries", 1000);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      Waiter.waitFor(testConf, sleepForRetries * 2, (Waiter.Predicate&lt;Exception&gt;) future::isDone);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    } finally {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      replicationEndpoint.stop();<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>  @Test<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public void testTerminateClearsBuffer() throws Exception {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    ReplicationSource source = new ReplicationSource();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    ReplicationSourceManager mockManager = mock(ReplicationSourceManager.class);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    MetricsReplicationGlobalSourceSource mockMetrics =<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      mock(MetricsReplicationGlobalSourceSource.class);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    AtomicLong buffer = new AtomicLong();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Mockito.when(mockManager.getTotalBufferUsed()).thenReturn(buffer);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Mockito.when(mockManager.getGlobalMetrics()).thenReturn(mockMetrics);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    ReplicationPeer mockPeer = mock(ReplicationPeer.class);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Configuration testConf = HBaseConfiguration.create();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    source.init(testConf, null, mockManager, null, mockPeer, null,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      "testPeer", null, p -&gt; OptionalLong.empty(), mock(MetricsSource.class));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    ReplicationSourceWALReader reader = new ReplicationSourceWALReader(null,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      conf, null, 0, null, source);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    ReplicationSourceShipper shipper =<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      new ReplicationSourceShipper(conf, null, null, source);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    shipper.entryReader = reader;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    source.workerThreads.put("testPeer", shipper);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    WALEntryBatch batch = new WALEntryBatch(10, logDir);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    WAL.Entry mockEntry = mock(WAL.Entry.class);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    WALEdit mockEdit = mock(WALEdit.class);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    WALKeyImpl mockKey = mock(WALKeyImpl.class);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    when(mockEntry.getEdit()).thenReturn(mockEdit);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    when(mockEdit.isEmpty()).thenReturn(false);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    when(mockEntry.getKey()).thenReturn(mockKey);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    when(mockKey.estimatedSerializedSizeOf()).thenReturn(1000L);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    when(mockEdit.heapSize()).thenReturn(10000L);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    when(mockEdit.size()).thenReturn(0);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    ArrayList&lt;Cell&gt; cells = new ArrayList&lt;&gt;();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    KeyValue kv = new KeyValue(Bytes.toBytes("0001"), Bytes.toBytes("f"),<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      Bytes.toBytes("1"), Bytes.toBytes("v1"));<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    cells.add(kv);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    when(mockEdit.getCells()).thenReturn(cells);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    reader.addEntryToBatch(batch, mockEntry);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    reader.entryBatchQueue.put(batch);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    source.terminate("test");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    assertEquals(0, source.getSourceManager().getTotalBufferUsed().get());<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>  /**<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * Tests that recovered queues are preserved on a regionserver shutdown.<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * See HBASE-18192<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  @Test<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public void testServerShutdownRecoveredQueue() throws Exception {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      // Ensure single-threaded WAL<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      conf.set("hbase.wal.provider", "defaultProvider");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      conf.setInt("replication.sleep.before.failover", 2000);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      // Introduces a delay in regionserver shutdown to give the race condition a chance to kick in.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      conf.set(HConstants.REGION_SERVER_IMPL, ShutdownDelayRegionServer.class.getName());<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster(2);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      TEST_UTIL_PEER.startMiniCluster(1);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>      HRegionServer serverA = cluster.getRegionServer(0);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      final ReplicationSourceManager managerA =<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          serverA.getReplicationSourceService().getReplicationManager();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      HRegionServer serverB = cluster.getRegionServer(1);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      final ReplicationSourceManager managerB =<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          serverB.getReplicationSourceService().getReplicationManager();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      final Admin admin = TEST_UTIL.getAdmin();<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final String peerId = "TestPeer";<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      admin.addReplicationPeer(peerId,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        ReplicationPeerConfig.newBuilder().setClusterKey(TEST_UTIL_PEER.getClusterKey()).build());<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      // Wait for replication sources to come up<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        @Override public boolean evaluate() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          return !(managerA.getSources().isEmpty() || managerB.getSources().isEmpty());<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>      // Disabling peer makes sure there is at least one log to claim when the server dies<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      // The recovered queue will also stay there until the peer is disabled even if the<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      // WALs it contains have no data.<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      admin.disableReplicationPeer(peerId);<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>    protected void stopServiceThreads() {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // Add a delay before service threads are shutdown.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      // This will keep the zookeeper connection alive for the duration of the delay.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      LOG.info("Adding a delay to the regionserver shutdown");<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        Thread.sleep(2000);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      } catch (InterruptedException ex) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.error("Interrupted while sleeping");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      super.stopServiceThreads();<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>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * Deadend Endpoint. Does nothing.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public static class DoNothingReplicationEndpoint extends HBaseInterClusterReplicationEndpoint {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    private final UUID uuid = UUID.randomUUID();<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    @Override public void init(Context context) throws IOException {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      this.ctx = context;<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 public WALEntryFilter getWALEntryfilter() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return null;<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 public synchronized UUID getPeerUUID() {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      return this.uuid;<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>    @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    protected void doStart() {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      notifyStarted();<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>    @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    protected void doStop() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      notifyStopped();<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>    @Override public boolean canReplicateToSameCluster() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return true;<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><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  /**<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Deadend Endpoint. Does nothing.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class FaultyReplicationEndpoint extends DoNothingReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static int count = 0;<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public synchronized UUID getPeerUUID() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if(count==0) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        count++;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        throw new RuntimeException();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } else {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        return super.getPeerUUID();<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">353</span>      // Stopping serverA<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      // It's queues should be claimed by the only other alive server i.e. serverB<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      cluster.stopRegionServer(serverA.getServerName());<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        @Override public boolean evaluate() throws Exception {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          return managerB.getOldSources().size() == 1;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      });<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>      final HRegionServer serverC = cluster.startRegionServer().getRegionServer();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      serverC.waitForServerOnline();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        @Override public boolean evaluate() throws Exception {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          return serverC.getReplicationSourceService() != null;<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>      final ReplicationSourceManager managerC =<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          ((Replication) serverC.getReplicationSourceService()).getReplicationManager();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      // Sanity check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      assertEquals(0, managerC.getOldSources().size());<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // Stopping serverB<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      // Now serverC should have two recovered queues:<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      // 1. The serverB's normal queue<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      // 2. serverA's recovered queue on serverB<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      cluster.stopRegionServer(serverB.getServerName());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      Waiter.waitFor(conf, 20000,<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 2);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      admin.enableReplicationPeer(peerId);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Waiter.waitFor(conf, 20000,<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 0);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      conf.set(HConstants.REGION_SERVER_IMPL, HRegionServer.class.getName());<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>  /**<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * Regionserver implementation that adds a delay on the graceful shutdown.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   */<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  public static class ShutdownDelayRegionServer extends HRegionServer {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    public ShutdownDelayRegionServer(Configuration conf) throws IOException {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      super(conf);<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>    @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    protected void stopServiceThreads() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      // Add a delay before service threads are shutdown.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      // This will keep the zookeeper connection alive for the duration of the delay.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      LOG.info("Adding a delay to the regionserver shutdown");<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Thread.sleep(2000);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      } catch (InterruptedException ex) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        LOG.error("Interrupted while sleeping");<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super.stopServiceThreads();<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>   * Deadend Endpoint. Does nothing.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public static class DoNothingReplicationEndpoint extends HBaseInterClusterReplicationEndpoint {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    private final UUID uuid = UUID.randomUUID();<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><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * Test HBASE-20497<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  @Test<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public void testRecoveredReplicationSourceShipperGetPosition() throws Exception {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    String walGroupId = "fake-wal-group-id";<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    ServerName serverName = ServerName.valueOf("www.example.com", 12006, 1524679704418L);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    ServerName deadServer = ServerName.valueOf("www.deadServer.com", 12006, 1524679704419L);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    PriorityBlockingQueue&lt;Path&gt; queue = new PriorityBlockingQueue&lt;&gt;();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    queue.put(new Path("/www/html/test"));<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    RecoveredReplicationSource source = Mockito.mock(RecoveredReplicationSource.class);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Server server = Mockito.mock(Server.class);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    Mockito.when(server.getServerName()).thenReturn(serverName);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    Mockito.when(source.getServer()).thenReturn(server);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Mockito.when(source.getServerWALsBelongTo()).thenReturn(deadServer);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    ReplicationQueueStorage storage = Mockito.mock(ReplicationQueueStorage.class);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    Mockito.when(storage.getWALPosition(Mockito.eq(serverName), Mockito.any(), Mockito.any()))<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      .thenReturn(1001L);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    Mockito.when(storage.getWALPosition(Mockito.eq(deadServer), Mockito.any(), Mockito.any()))<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      .thenReturn(-1L);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    conf.setInt("replication.source.maxretriesmultiplier", -1);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    RecoveredReplicationSourceShipper shipper =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      new RecoveredReplicationSourceShipper(conf, walGroupId, queue, source, storage);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    assertEquals(1001L, shipper.getStartPosition());<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * during initialization and &lt;b&gt;eplication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Test<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public void testAbortFalseOnError() throws IOException {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    ReplicationSource rs = new ReplicationSource();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    conf.setBoolean("replication.source.regionserver.abort", false);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    String queueId = "qid";<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    RegionServerServices rss =<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    try {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      rs.startup();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      assertTrue(rs.isSourceActive());<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      rs.enqueueLog(new Path("a.1"));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    } finally {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      rs.terminate("Done");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      rss.stop("Done");<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * during initialization and &lt;b&gt;replication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   */<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  @Test<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  public void testAbortTrueOnError() throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    ReplicationSource rs = new ReplicationSource();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    String queueId = "qid";<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    RegionServerServices rss =<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    try {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      rs.startup();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      Waiter.waitFor(conf, 1000, () -&gt; FaultyReplicationEndpoint.count &gt; 0);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      assertFalse(rs.isSourceActive());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      assertTrue(rss.isAborted());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } finally {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      rs.terminate("Done");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      rss.stop("Done");<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>}<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">417</span>    @Override public void init(Context context) throws IOException {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      this.ctx = context;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    @Override public WALEntryFilter getWALEntryfilter() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return null;<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>    @Override public synchronized UUID getPeerUUID() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      return this.uuid;<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>    @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    protected void doStart() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      notifyStarted();<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>    protected void doStop() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      notifyStopped();<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 public boolean canReplicateToSameCluster() {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      return true;<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>  /**<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * Deadend Endpoint. Does nothing.<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  public static class FaultyReplicationEndpoint extends DoNothingReplicationEndpoint {<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>    static int count = 0;<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 synchronized UUID getPeerUUID() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      if(count==0) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        count++;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        throw new RuntimeException();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        return super.getPeerUUID();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  }<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>   * Test HBASE-20497<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  @Test<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public void testRecoveredReplicationSourceShipperGetPosition() throws Exception {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    String walGroupId = "fake-wal-group-id";<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    ServerName serverName = ServerName.valueOf("www.example.com", 12006, 1524679704418L);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    ServerName deadServer = ServerName.valueOf("www.deadServer.com", 12006, 1524679704419L);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    PriorityBlockingQueue&lt;Path&gt; queue = new PriorityBlockingQueue&lt;&gt;();<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    queue.put(new Path("/www/html/test"));<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    RecoveredReplicationSource source = mock(RecoveredReplicationSource.class);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    Server server = mock(Server.class);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    Mockito.when(server.getServerName()).thenReturn(serverName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    Mockito.when(source.getServer()).thenReturn(server);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    Mockito.when(source.getServerWALsBelongTo()).thenReturn(deadServer);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    ReplicationQueueStorage storage = mock(ReplicationQueueStorage.class);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    Mockito.when(storage.getWALPosition(Mockito.eq(serverName), Mockito.any(), Mockito.any()))<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      .thenReturn(1001L);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    Mockito.when(storage.getWALPosition(Mockito.eq(deadServer), Mockito.any(), Mockito.any()))<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      .thenReturn(-1L);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    conf.setInt("replication.source.maxretriesmultiplier", -1);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    RecoveredReplicationSourceShipper shipper =<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      new RecoveredReplicationSourceShipper(conf, walGroupId, queue, source, storage);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    assertEquals(1001L, shipper.getStartPosition());<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * during initialization and &lt;b&gt;eplication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   */<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  @Test<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  public void testAbortFalseOnError() throws IOException {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    ReplicationSource rs = new ReplicationSource();<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    conf.setBoolean("replication.source.regionserver.abort", false);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    String queueId = "qid";<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    RegionServerServices rss =<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    try {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      rs.startup();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      assertTrue(rs.isSourceActive());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      rs.enqueueLog(new Path("a.1"));<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    } finally {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      rs.terminate("Done");<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      rss.stop("Done");<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * during initialization and &lt;b&gt;replication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  @Test<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public void testAbortTrueOnError() throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    ReplicationSource rs = new ReplicationSource();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    String queueId = "qid";<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    RegionServerServices rss =<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    try {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      rs.startup();<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      Waiter.waitFor(conf, 1000, () -&gt; FaultyReplicationEndpoint.count &gt; 0);<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      assertFalse(rs.isSourceActive());<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      assertTrue(rss.isAborted());<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    } finally {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      rs.terminate("Done");<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      rss.stop("Done");<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>}<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html
index 8db2bac..2e672b7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.FaultyReplicationEndpoint.html
@@ -30,501 +30,545 @@
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertNotNull;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertNull;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.OptionalLong;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.ExecutorService;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.Executors;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Future;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellBuilderFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CellBuilderType;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.Server;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Waiter;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.WALEntryFilter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.AfterClass;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.junit.BeforeClass;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.junit.ClassRule;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.junit.Test;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.experimental.categories.Category;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.mockito.Mockito;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>@Category({ReplicationTests.class, MediumTests.class})<a name="line.74"></a>
-<span class="sourceLineNo">075</span>public class TestReplicationSource {<a name="line.75"></a>
+<span class="sourceLineNo">025</span>import static org.mockito.Mockito.mock;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.mockito.Mockito.when;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.io.IOException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.OptionalLong;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.UUID;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ExecutorService;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Executors;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.Future;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FileSystem;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.Path;<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.CellBuilderFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.CellBuilderType;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<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.KeyValue;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Server;<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.Waiter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.replication.WALEntryFilter;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.AfterClass;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.BeforeClass;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.ClassRule;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.junit.Test;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.junit.experimental.categories.Category;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.mockito.Mockito;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.slf4j.Logger;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.slf4j.LoggerFactory;<a name="line.75"></a>
 <span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @ClassRule<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      HBaseClassTestRule.forClass(TestReplicationSource.class);<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private static final Logger LOG =<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      LoggerFactory.getLogger(TestReplicationSource.class);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final static HBaseTestingUtility TEST_UTIL =<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      new HBaseTestingUtility();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final static HBaseTestingUtility TEST_UTIL_PEER =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      new HBaseTestingUtility();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static FileSystem FS;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private static Path oldLogDir;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static Path logDir;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @BeforeClass<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static void setUpBeforeClass() throws Exception {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    FS = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    Path rootDir = TEST_UTIL.createRootDir();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    if (FS.exists(oldLogDir)) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      FS.delete(oldLogDir, true);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (FS.exists(logDir)) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      FS.delete(logDir, 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>  @AfterClass<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public static void tearDownAfterClass() throws Exception {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    TEST_UTIL_PEER.shutdownMiniHBaseCluster();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    TEST_UTIL.shutdownMiniDFSCluster();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Test the default ReplicationSource skips queuing hbase:meta WAL files.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  @Test<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void testDefaultSkipsMetaWAL() throws IOException {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    ReplicationSource rs = new ReplicationSource();<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    String queueId = "qid";<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    RegionServerServices rss =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    try {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      rs.startup();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      assertTrue(rs.isSourceActive());<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      rs.enqueueLog(new Path("a.1"));<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    } finally {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      rs.terminate("Done");<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      rss.stop("Done");<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>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Test that we filter out meta edits, etc.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testWALEntryFilter() throws IOException {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // To get the fully constructed default WALEntryFilter, need to create a ReplicationSource<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    // instance and init it.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    ReplicationSource rs = new ReplicationSource();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    UUID uuid = UUID.randomUUID();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    String queueId = "qid";<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    RegionServerServices rss =<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId,<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      uuid, p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    try {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      rs.startup();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      TEST_UTIL.waitFor(30000, () -&gt; rs.getWalEntryFilter() != null);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      WALEntryFilter wef = rs.getWalEntryFilter();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // Test non-system WAL edit.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      WALEdit we = new WALEdit().add(CellBuilderFactory.create(CellBuilderType.DEEP_COPY).<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        setRow(HConstants.EMPTY_START_ROW).<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        setFamily(HConstants.CATALOG_FAMILY).<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        setType(Cell.Type.Put).build());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      WAL.Entry e = new WAL.Entry(new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY,<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        TableName.valueOf("test"), -1, -1, uuid), we);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      assertTrue(wef.filter(e) == e);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // Test system WAL edit.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      e = new WAL.Entry(<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY, TableName.META_TABLE_NAME, -1, -1, uuid),<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          we);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      assertNull(wef.filter(e));<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    } finally {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      rs.terminate("Done");<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      rss.stop("Done");<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>   * Sanity check that we can move logs around while we are reading<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * from them. Should this test fail, ReplicationSource would have a hard<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * time reading logs that are being archived.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // This tests doesn't belong in here... it is not about ReplicationSource.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public void testLogMoving() throws Exception{<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    Path logPath = new Path(logDir, "log");<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (!FS.exists(logDir)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      FS.mkdirs(logDir);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (!FS.exists(oldLogDir)) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      FS.mkdirs(oldLogDir);<a name="line.210"></a>
+<span class="sourceLineNo">077</span>@Category({ReplicationTests.class, MediumTests.class})<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public class TestReplicationSource {<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @ClassRule<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      HBaseClassTestRule.forClass(TestReplicationSource.class);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private static final Logger LOG =<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      LoggerFactory.getLogger(TestReplicationSource.class);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final static HBaseTestingUtility TEST_UTIL =<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      new HBaseTestingUtility();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final static HBaseTestingUtility TEST_UTIL_PEER =<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      new HBaseTestingUtility();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private static FileSystem FS;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static Path oldLogDir;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private static Path logDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @BeforeClass<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public static void setUpBeforeClass() throws Exception {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    FS = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    Path rootDir = TEST_UTIL.createRootDir();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    if (FS.exists(oldLogDir)) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      FS.delete(oldLogDir, true);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    if (FS.exists(logDir)) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      FS.delete(logDir, true);<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>  @AfterClass<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static void tearDownAfterClass() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    TEST_UTIL_PEER.shutdownMiniHBaseCluster();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    TEST_UTIL.shutdownMiniDFSCluster();<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>   * Test the default ReplicationSource skips queuing hbase:meta WAL files.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public void testDefaultSkipsMetaWAL() throws IOException {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    ReplicationSource rs = new ReplicationSource();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    String queueId = "qid";<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    RegionServerServices rss =<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    try {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      rs.startup();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      assertTrue(rs.isSourceActive());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      rs.enqueueLog(new Path("a.1"));<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } finally {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      rs.terminate("Done");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      rss.stop("Done");<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * Test that we filter out meta edits, etc.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  @Test<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public void testWALEntryFilter() throws IOException {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    // To get the fully constructed default WALEntryFilter, need to create a ReplicationSource<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // instance and init it.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ReplicationSource rs = new ReplicationSource();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    UUID uuid = UUID.randomUUID();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    String queueId = "qid";<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    RegionServerServices rss =<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId,<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      uuid, p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      rs.startup();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      TEST_UTIL.waitFor(30000, () -&gt; rs.getWalEntryFilter() != null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      WALEntryFilter wef = rs.getWalEntryFilter();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      // Test non-system WAL edit.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      WALEdit we = new WALEdit().add(CellBuilderFactory.create(CellBuilderType.DEEP_COPY).<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        setRow(HConstants.EMPTY_START_ROW).<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        setFamily(HConstants.CATALOG_FAMILY).<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        setType(Cell.Type.Put).build());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      WAL.Entry e = new WAL.Entry(new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY,<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        TableName.valueOf("test"), -1, -1, uuid), we);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      assertTrue(wef.filter(e) == e);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // Test system WAL edit.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      e = new WAL.Entry(<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY, TableName.META_TABLE_NAME, -1, -1, uuid),<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          we);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      assertNull(wef.filter(e));<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    } finally {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      rs.terminate("Done");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      rss.stop("Done");<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><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * Sanity check that we can move logs around while we are reading<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * from them. Should this test fail, ReplicationSource would have a hard<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * time reading logs that are being archived.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  // This tests doesn't belong in here... it is not about ReplicationSource.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  @Test<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public void testLogMoving() throws Exception{<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    Path logPath = new Path(logDir, "log");<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!FS.exists(logDir)) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      FS.mkdirs(logDir);<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    WALProvider.Writer writer = WALFactory.createWALWriter(FS, logPath,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        TEST_UTIL.getConfiguration());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for(int i = 0; i &lt; 3; i++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      byte[] b = Bytes.toBytes(Integer.toString(i));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      KeyValue kv = new KeyValue(b,b,b);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      WALEdit edit = new WALEdit();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      edit.add(kv);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      WALKeyImpl key = new WALKeyImpl(b, TableName.valueOf(b), 0, 0,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          HConstants.DEFAULT_CLUSTER_ID);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      writer.append(new WAL.Entry(key, edit));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      writer.sync(false);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    writer.close();<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>    WAL.Reader reader = WALFactory.createReader(FS, logPath, TEST_UTIL.getConfiguration());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    WAL.Entry entry = reader.next();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertNotNull(entry);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>    Path oldLogPath = new Path(oldLogDir, "log");<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    FS.rename(logPath, oldLogPath);<a name="line.231"></a>
+<span class="sourceLineNo">212</span>    if (!FS.exists(oldLogDir)) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      FS.mkdirs(oldLogDir);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    WALProvider.Writer writer = WALFactory.createWALWriter(FS, logPath,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        TEST_UTIL.getConfiguration());<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(int i = 0; i &lt; 3; i++) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      byte[] b = Bytes.toBytes(Integer.toString(i));<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      KeyValue kv = new KeyValue(b,b,b);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      WALEdit edit = new WALEdit();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      edit.add(kv);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      WALKeyImpl key = new WALKeyImpl(b, TableName.valueOf(b), 0, 0,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          HConstants.DEFAULT_CLUSTER_ID);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      writer.append(new WAL.Entry(key, edit));<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      writer.sync(false);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    writer.close();<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>    WAL.Reader reader = WALFactory.createReader(FS, logPath, TEST_UTIL.getConfiguration());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    WAL.Entry entry = reader.next();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertNotNull(entry);<a name="line.231"></a>
 <span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    entry = reader.next();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    assertNotNull(entry);<a name="line.234"></a>
+<span class="sourceLineNo">233</span>    Path oldLogPath = new Path(oldLogDir, "log");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    FS.rename(logPath, oldLogPath);<a name="line.234"></a>
 <span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    reader.next();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    entry = reader.next();<a name="line.237"></a>
+<span class="sourceLineNo">236</span>    entry = reader.next();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    assertNotNull(entry);<a name="line.237"></a>
 <span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertNull(entry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    reader.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>   * Tests that {@link ReplicationSource#terminate(String)} will timeout properly<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Test<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void testTerminateTimeout() throws Exception {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    ReplicationSource source = new ReplicationSource();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    ReplicationEndpoint<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      replicationEndpoint = new DoNothingReplicationEndpoint();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    try {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      replicationEndpoint.start();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      Configuration testConf = HBaseConfiguration.create();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      testConf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      source.init(testConf, null, manager, null, mockPeer, null, "testPeer",<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        null, p -&gt; OptionalLong.empty(), null);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      ExecutorService executor = Executors.newSingleThreadExecutor();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      Future&lt;?&gt; future = executor.submit(<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        () -&gt; source.terminate("testing source termination"));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      long sleepForRetries = testConf.getLong("replication.source.sleepforretries", 1000);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      Waiter.waitFor(testConf, sleepForRetries * 2, (Waiter.Predicate&lt;Exception&gt;) future::isDone);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    } finally {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      replicationEndpoint.stop();<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><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * Tests that recovered queues are preserved on a regionserver shutdown.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * See HBASE-18192<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @Test<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  public void testServerShutdownRecoveredQueue() throws Exception {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // Ensure single-threaded WAL<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      conf.set("hbase.wal.provider", "defaultProvider");<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      conf.setInt("replication.sleep.before.failover", 2000);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // Introduces a delay in regionserver shutdown to give the race condition a chance to kick in.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      conf.set(HConstants.REGION_SERVER_IMPL, ShutdownDelayRegionServer.class.getName());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster(2);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      TEST_UTIL_PEER.startMiniCluster(1);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      HRegionServer serverA = cluster.getRegionServer(0);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      final ReplicationSourceManager managerA =<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          serverA.getReplicationSourceService().getReplicationManager();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      HRegionServer serverB = cluster.getRegionServer(1);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      final ReplicationSourceManager managerB =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          serverB.getReplicationSourceService().getReplicationManager();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      final Admin admin = TEST_UTIL.getAdmin();<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>      final String peerId = "TestPeer";<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      admin.addReplicationPeer(peerId,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        ReplicationPeerConfig.newBuilder().setClusterKey(TEST_UTIL_PEER.getClusterKey()).build());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Wait for replication sources to come up<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        @Override public boolean evaluate() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          return !(managerA.getSources().isEmpty() || managerB.getSources().isEmpty());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      });<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      // Disabling peer makes sure there is at least one log to claim when the server dies<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      // The recovered queue will also stay there until the peer is disabled even if the<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // WALs it contains have no data.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      admin.disableReplicationPeer(peerId);<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>      // Stopping serverA<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // It's queues should be claimed by the only other alive server i.e. serverB<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      cluster.stopRegionServer(serverA.getServerName());<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        @Override public boolean evaluate() throws Exception {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          return managerB.getOldSources().size() == 1;<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><a name="line.317"></a>
-<span class="sourceLineNo">318</span>      final HRegionServer serverC = cluster.startRegionServer().getRegionServer();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      serverC.waitForServerOnline();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        @Override public boolean evaluate() throws Exception {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          return serverC.getReplicationSourceService() != null;<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>      final ReplicationSourceManager managerC =<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          ((Replication) serverC.getReplicationSourceService()).getReplicationManager();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Sanity check<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      assertEquals(0, managerC.getOldSources().size());<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // Stopping serverB<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      // Now serverC should have two recovered queues:<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      // 1. The serverB's normal queue<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      // 2. serverA's recovered queue on serverB<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      cluster.stopRegionServer(serverB.getServerName());<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      Waiter.waitFor(conf, 20000,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 2);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      admin.enableReplicationPeer(peerId);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      Waiter.waitFor(conf, 20000,<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 0);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      conf.set(HConstants.REGION_SERVER_IMPL, HRegionServer.class.getName());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Regionserver implementation that adds a delay on the graceful shutdown.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public static class ShutdownDelayRegionServer extends HRegionServer {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    public ShutdownDelayRegionServer(Configuration conf) throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">239</span>    reader.next();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    entry = reader.next();<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertNull(entry);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    reader.close();<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>   * Tests that {@link ReplicationSource#terminate(String)} will timeout properly<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  @Test<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  public void testTerminateTimeout() throws Exception {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    ReplicationSource source = new ReplicationSource();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    ReplicationEndpoint<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      replicationEndpoint = new DoNothingReplicationEndpoint();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    try {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      replicationEndpoint.start();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      Configuration testConf = HBaseConfiguration.create();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      testConf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      source.init(testConf, null, manager, null, mockPeer, null, "testPeer",<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        null, p -&gt; OptionalLong.empty(), null);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      ExecutorService executor = Executors.newSingleThreadExecutor();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      Future&lt;?&gt; future = executor.submit(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        () -&gt; source.terminate("testing source termination"));<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      long sleepForRetries = testConf.getLong("replication.source.sleepforretries", 1000);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      Waiter.waitFor(testConf, sleepForRetries * 2, (Waiter.Predicate&lt;Exception&gt;) future::isDone);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    } finally {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      replicationEndpoint.stop();<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>  @Test<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public void testTerminateClearsBuffer() throws Exception {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    ReplicationSource source = new ReplicationSource();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    ReplicationSourceManager mockManager = mock(ReplicationSourceManager.class);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    MetricsReplicationGlobalSourceSource mockMetrics =<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      mock(MetricsReplicationGlobalSourceSource.class);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    AtomicLong buffer = new AtomicLong();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Mockito.when(mockManager.getTotalBufferUsed()).thenReturn(buffer);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Mockito.when(mockManager.getGlobalMetrics()).thenReturn(mockMetrics);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    ReplicationPeer mockPeer = mock(ReplicationPeer.class);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Configuration testConf = HBaseConfiguration.create();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    source.init(testConf, null, mockManager, null, mockPeer, null,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      "testPeer", null, p -&gt; OptionalLong.empty(), mock(MetricsSource.class));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    ReplicationSourceWALReader reader = new ReplicationSourceWALReader(null,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      conf, null, 0, null, source);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    ReplicationSourceShipper shipper =<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      new ReplicationSourceShipper(conf, null, null, source);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    shipper.entryReader = reader;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    source.workerThreads.put("testPeer", shipper);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    WALEntryBatch batch = new WALEntryBatch(10, logDir);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    WAL.Entry mockEntry = mock(WAL.Entry.class);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    WALEdit mockEdit = mock(WALEdit.class);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    WALKeyImpl mockKey = mock(WALKeyImpl.class);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    when(mockEntry.getEdit()).thenReturn(mockEdit);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    when(mockEdit.isEmpty()).thenReturn(false);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    when(mockEntry.getKey()).thenReturn(mockKey);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    when(mockKey.estimatedSerializedSizeOf()).thenReturn(1000L);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    when(mockEdit.heapSize()).thenReturn(10000L);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    when(mockEdit.size()).thenReturn(0);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    ArrayList&lt;Cell&gt; cells = new ArrayList&lt;&gt;();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    KeyValue kv = new KeyValue(Bytes.toBytes("0001"), Bytes.toBytes("f"),<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      Bytes.toBytes("1"), Bytes.toBytes("v1"));<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    cells.add(kv);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    when(mockEdit.getCells()).thenReturn(cells);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    reader.addEntryToBatch(batch, mockEntry);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    reader.entryBatchQueue.put(batch);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    source.terminate("test");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    assertEquals(0, source.getSourceManager().getTotalBufferUsed().get());<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>  /**<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * Tests that recovered queues are preserved on a regionserver shutdown.<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * See HBASE-18192<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  @Test<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public void testServerShutdownRecoveredQueue() throws Exception {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      // Ensure single-threaded WAL<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      conf.set("hbase.wal.provider", "defaultProvider");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      conf.setInt("replication.sleep.before.failover", 2000);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      // Introduces a delay in regionserver shutdown to give the race condition a chance to kick in.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      conf.set(HConstants.REGION_SERVER_IMPL, ShutdownDelayRegionServer.class.getName());<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster(2);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      TEST_UTIL_PEER.startMiniCluster(1);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>      HRegionServer serverA = cluster.getRegionServer(0);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      final ReplicationSourceManager managerA =<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          serverA.getReplicationSourceService().getReplicationManager();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      HRegionServer serverB = cluster.getRegionServer(1);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      final ReplicationSourceManager managerB =<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          serverB.getReplicationSourceService().getReplicationManager();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      final Admin admin = TEST_UTIL.getAdmin();<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final String peerId = "TestPeer";<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      admin.addReplicationPeer(peerId,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        ReplicationPeerConfig.newBuilder().setClusterKey(TEST_UTIL_PEER.getClusterKey()).build());<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      // Wait for replication sources to come up<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        @Override public boolean evaluate() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          return !(managerA.getSources().isEmpty() || managerB.getSources().isEmpty());<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>      // Disabling peer makes sure there is at least one log to claim when the server dies<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      // The recovered queue will also stay there until the peer is disabled even if the<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      // WALs it contains have no data.<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      admin.disableReplicationPeer(peerId);<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>    protected void stopServiceThreads() {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // Add a delay before service threads are shutdown.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      // This will keep the zookeeper connection alive for the duration of the delay.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      LOG.info("Adding a delay to the regionserver shutdown");<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        Thread.sleep(2000);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      } catch (InterruptedException ex) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.error("Interrupted while sleeping");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      super.stopServiceThreads();<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>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * Deadend Endpoint. Does nothing.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public static class DoNothingReplicationEndpoint extends HBaseInterClusterReplicationEndpoint {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    private final UUID uuid = UUID.randomUUID();<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    @Override public void init(Context context) throws IOException {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      this.ctx = context;<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 public WALEntryFilter getWALEntryfilter() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return null;<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 public synchronized UUID getPeerUUID() {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      return this.uuid;<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>    @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    protected void doStart() {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      notifyStarted();<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>    @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    protected void doStop() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      notifyStopped();<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>    @Override public boolean canReplicateToSameCluster() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return true;<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><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  /**<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Deadend Endpoint. Does nothing.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class FaultyReplicationEndpoint extends DoNothingReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static int count = 0;<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public synchronized UUID getPeerUUID() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if(count==0) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        count++;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        throw new RuntimeException();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } else {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        return super.getPeerUUID();<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">353</span>      // Stopping serverA<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      // It's queues should be claimed by the only other alive server i.e. serverB<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      cluster.stopRegionServer(serverA.getServerName());<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        @Override public boolean evaluate() throws Exception {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          return managerB.getOldSources().size() == 1;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      });<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>      final HRegionServer serverC = cluster.startRegionServer().getRegionServer();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      serverC.waitForServerOnline();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        @Override public boolean evaluate() throws Exception {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          return serverC.getReplicationSourceService() != null;<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>      final ReplicationSourceManager managerC =<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          ((Replication) serverC.getReplicationSourceService()).getReplicationManager();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      // Sanity check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      assertEquals(0, managerC.getOldSources().size());<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // Stopping serverB<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      // Now serverC should have two recovered queues:<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      // 1. The serverB's normal queue<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      // 2. serverA's recovered queue on serverB<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      cluster.stopRegionServer(serverB.getServerName());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      Waiter.waitFor(conf, 20000,<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 2);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      admin.enableReplicationPeer(peerId);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Waiter.waitFor(conf, 20000,<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 0);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      conf.set(HConstants.REGION_SERVER_IMPL, HRegionServer.class.getName());<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>  /**<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * Regionserver implementation that adds a delay on the graceful shutdown.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   */<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  public static class ShutdownDelayRegionServer extends HRegionServer {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    public ShutdownDelayRegionServer(Configuration conf) throws IOException {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      super(conf);<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>    @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    protected void stopServiceThreads() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      // Add a delay before service threads are shutdown.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      // This will keep the zookeeper connection alive for the duration of the delay.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      LOG.info("Adding a delay to the regionserver shutdown");<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Thread.sleep(2000);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      } catch (InterruptedException ex) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        LOG.error("Interrupted while sleeping");<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super.stopServiceThreads();<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>   * Deadend Endpoint. Does nothing.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public static class DoNothingReplicationEndpoint extends HBaseInterClusterReplicationEndpoint {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    private final UUID uuid = UUID.randomUUID();<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><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * Test HBASE-20497<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  @Test<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public void testRecoveredReplicationSourceShipperGetPosition() throws Exception {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    String walGroupId = "fake-wal-group-id";<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    ServerName serverName = ServerName.valueOf("www.example.com", 12006, 1524679704418L);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    ServerName deadServer = ServerName.valueOf("www.deadServer.com", 12006, 1524679704419L);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    PriorityBlockingQueue&lt;Path&gt; queue = new PriorityBlockingQueue&lt;&gt;();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    queue.put(new Path("/www/html/test"));<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    RecoveredReplicationSource source = Mockito.mock(RecoveredReplicationSource.class);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Server server = Mockito.mock(Server.class);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    Mockito.when(server.getServerName()).thenReturn(serverName);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    Mockito.when(source.getServer()).thenReturn(server);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Mockito.when(source.getServerWALsBelongTo()).thenReturn(deadServer);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    ReplicationQueueStorage storage = Mockito.mock(ReplicationQueueStorage.class);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    Mockito.when(storage.getWALPosition(Mockito.eq(serverName), Mockito.any(), Mockito.any()))<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      .thenReturn(1001L);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    Mockito.when(storage.getWALPosition(Mockito.eq(deadServer), Mockito.any(), Mockito.any()))<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      .thenReturn(-1L);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    conf.setInt("replication.source.maxretriesmultiplier", -1);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    RecoveredReplicationSourceShipper shipper =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      new RecoveredReplicationSourceShipper(conf, walGroupId, queue, source, storage);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    assertEquals(1001L, shipper.getStartPosition());<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * during initialization and &lt;b&gt;eplication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Test<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public void testAbortFalseOnError() throws IOException {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    ReplicationSource rs = new ReplicationSource();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    conf.setBoolean("replication.source.regionserver.abort", false);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    String queueId = "qid";<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    RegionServerServices rss =<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    try {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      rs.startup();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      assertTrue(rs.isSourceActive());<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      rs.enqueueLog(new Path("a.1"));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    } finally {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      rs.terminate("Done");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      rss.stop("Done");<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * during initialization and &lt;b&gt;replication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   */<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  @Test<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  public void testAbortTrueOnError() throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    ReplicationSource rs = new ReplicationSource();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    String queueId = "qid";<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    RegionServerServices rss =<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    try {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      rs.startup();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      Waiter.waitFor(conf, 1000, () -&gt; FaultyReplicationEndpoint.count &gt; 0);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      assertFalse(rs.isSourceActive());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      assertTrue(rss.isAborted());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } finally {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      rs.terminate("Done");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      rss.stop("Done");<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>}<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">417</span>    @Override public void init(Context context) throws IOException {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      this.ctx = context;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    @Override public WALEntryFilter getWALEntryfilter() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return null;<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>    @Override public synchronized UUID getPeerUUID() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      return this.uuid;<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>    @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    protected void doStart() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      notifyStarted();<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>    protected void doStop() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      notifyStopped();<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 public boolean canReplicateToSameCluster() {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      return true;<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>  /**<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * Deadend Endpoint. Does nothing.<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  public static class FaultyReplicationEndpoint extends DoNothingReplicationEndpoint {<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>    static int count = 0;<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 synchronized UUID getPeerUUID() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      if(count==0) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        count++;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        throw new RuntimeException();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        return super.getPeerUUID();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  }<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>   * Test HBASE-20497<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  @Test<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public void testRecoveredReplicationSourceShipperGetPosition() throws Exception {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    String walGroupId = "fake-wal-group-id";<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    ServerName serverName = ServerName.valueOf("www.example.com", 12006, 1524679704418L);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    ServerName deadServer = ServerName.valueOf("www.deadServer.com", 12006, 1524679704419L);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    PriorityBlockingQueue&lt;Path&gt; queue = new PriorityBlockingQueue&lt;&gt;();<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    queue.put(new Path("/www/html/test"));<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    RecoveredReplicationSource source = mock(RecoveredReplicationSource.class);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    Server server = mock(Server.class);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    Mockito.when(server.getServerName()).thenReturn(serverName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    Mockito.when(source.getServer()).thenReturn(server);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    Mockito.when(source.getServerWALsBelongTo()).thenReturn(deadServer);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    ReplicationQueueStorage storage = mock(ReplicationQueueStorage.class);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    Mockito.when(storage.getWALPosition(Mockito.eq(serverName), Mockito.any(), Mockito.any()))<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      .thenReturn(1001L);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    Mockito.when(storage.getWALPosition(Mockito.eq(deadServer), Mockito.any(), Mockito.any()))<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      .thenReturn(-1L);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    conf.setInt("replication.source.maxretriesmultiplier", -1);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    RecoveredReplicationSourceShipper shipper =<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      new RecoveredReplicationSourceShipper(conf, walGroupId, queue, source, storage);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    assertEquals(1001L, shipper.getStartPosition());<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * during initialization and &lt;b&gt;eplication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   */<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  @Test<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  public void testAbortFalseOnError() throws IOException {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    ReplicationSource rs = new ReplicationSource();<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    conf.setBoolean("replication.source.regionserver.abort", false);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    String queueId = "qid";<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    RegionServerServices rss =<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    try {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      rs.startup();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      assertTrue(rs.isSourceActive());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      rs.enqueueLog(new Path("a.1"));<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    } finally {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      rs.terminate("Done");<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      rss.stop("Done");<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * during initialization and &lt;b&gt;replication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  @Test<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public void testAbortTrueOnError() throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    ReplicationSource rs = new ReplicationSource();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    String queueId = "qid";<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    RegionServerServices rss =<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    try {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      rs.startup();<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      Waiter.waitFor(conf, 1000, () -&gt; FaultyReplicationEndpoint.count &gt; 0);<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      assertFalse(rs.isSourceActive());<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      assertTrue(rss.isAborted());<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    } finally {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      rs.terminate("Done");<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      rss.stop("Done");<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>}<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html
index 8db2bac..2e672b7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.ShutdownDelayRegionServer.html
@@ -30,501 +30,545 @@
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertNotNull;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertNull;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.OptionalLong;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.ExecutorService;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.Executors;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Future;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellBuilderFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CellBuilderType;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.Server;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Waiter;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.WALEntryFilter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.AfterClass;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.junit.BeforeClass;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.junit.ClassRule;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.junit.Test;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.experimental.categories.Category;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.mockito.Mockito;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>@Category({ReplicationTests.class, MediumTests.class})<a name="line.74"></a>
-<span class="sourceLineNo">075</span>public class TestReplicationSource {<a name="line.75"></a>
+<span class="sourceLineNo">025</span>import static org.mockito.Mockito.mock;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.mockito.Mockito.when;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.io.IOException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.OptionalLong;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.UUID;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ExecutorService;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Executors;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.Future;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FileSystem;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.Path;<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.CellBuilderFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.CellBuilderType;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<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.KeyValue;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Server;<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.Waiter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.replication.WALEntryFilter;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.AfterClass;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.BeforeClass;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.ClassRule;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.junit.Test;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.junit.experimental.categories.Category;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.mockito.Mockito;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.slf4j.Logger;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.slf4j.LoggerFactory;<a name="line.75"></a>
 <span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @ClassRule<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      HBaseClassTestRule.forClass(TestReplicationSource.class);<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private static final Logger LOG =<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      LoggerFactory.getLogger(TestReplicationSource.class);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final static HBaseTestingUtility TEST_UTIL =<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      new HBaseTestingUtility();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final static HBaseTestingUtility TEST_UTIL_PEER =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      new HBaseTestingUtility();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static FileSystem FS;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private static Path oldLogDir;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static Path logDir;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @BeforeClass<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static void setUpBeforeClass() throws Exception {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    FS = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    Path rootDir = TEST_UTIL.createRootDir();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    if (FS.exists(oldLogDir)) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      FS.delete(oldLogDir, true);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (FS.exists(logDir)) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      FS.delete(logDir, 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>  @AfterClass<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public static void tearDownAfterClass() throws Exception {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    TEST_UTIL_PEER.shutdownMiniHBaseCluster();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    TEST_UTIL.shutdownMiniDFSCluster();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Test the default ReplicationSource skips queuing hbase:meta WAL files.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  @Test<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void testDefaultSkipsMetaWAL() throws IOException {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    ReplicationSource rs = new ReplicationSource();<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    String queueId = "qid";<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    RegionServerServices rss =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    try {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      rs.startup();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      assertTrue(rs.isSourceActive());<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      rs.enqueueLog(new Path("a.1"));<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    } finally {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      rs.terminate("Done");<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      rss.stop("Done");<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>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Test that we filter out meta edits, etc.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testWALEntryFilter() throws IOException {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // To get the fully constructed default WALEntryFilter, need to create a ReplicationSource<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    // instance and init it.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    ReplicationSource rs = new ReplicationSource();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    UUID uuid = UUID.randomUUID();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    String queueId = "qid";<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    RegionServerServices rss =<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId,<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      uuid, p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    try {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      rs.startup();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      TEST_UTIL.waitFor(30000, () -&gt; rs.getWalEntryFilter() != null);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      WALEntryFilter wef = rs.getWalEntryFilter();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // Test non-system WAL edit.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      WALEdit we = new WALEdit().add(CellBuilderFactory.create(CellBuilderType.DEEP_COPY).<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        setRow(HConstants.EMPTY_START_ROW).<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        setFamily(HConstants.CATALOG_FAMILY).<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        setType(Cell.Type.Put).build());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      WAL.Entry e = new WAL.Entry(new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY,<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        TableName.valueOf("test"), -1, -1, uuid), we);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      assertTrue(wef.filter(e) == e);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // Test system WAL edit.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      e = new WAL.Entry(<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY, TableName.META_TABLE_NAME, -1, -1, uuid),<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          we);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      assertNull(wef.filter(e));<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    } finally {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      rs.terminate("Done");<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      rss.stop("Done");<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>   * Sanity check that we can move logs around while we are reading<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * from them. Should this test fail, ReplicationSource would have a hard<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * time reading logs that are being archived.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // This tests doesn't belong in here... it is not about ReplicationSource.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public void testLogMoving() throws Exception{<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    Path logPath = new Path(logDir, "log");<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (!FS.exists(logDir)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      FS.mkdirs(logDir);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (!FS.exists(oldLogDir)) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      FS.mkdirs(oldLogDir);<a name="line.210"></a>
+<span class="sourceLineNo">077</span>@Category({ReplicationTests.class, MediumTests.class})<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public class TestReplicationSource {<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @ClassRule<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      HBaseClassTestRule.forClass(TestReplicationSource.class);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private static final Logger LOG =<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      LoggerFactory.getLogger(TestReplicationSource.class);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final static HBaseTestingUtility TEST_UTIL =<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      new HBaseTestingUtility();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final static HBaseTestingUtility TEST_UTIL_PEER =<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      new HBaseTestingUtility();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private static FileSystem FS;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static Path oldLogDir;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private static Path logDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @BeforeClass<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public static void setUpBeforeClass() throws Exception {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    FS = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    Path rootDir = TEST_UTIL.createRootDir();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    if (FS.exists(oldLogDir)) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      FS.delete(oldLogDir, true);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    if (FS.exists(logDir)) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      FS.delete(logDir, true);<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>  @AfterClass<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static void tearDownAfterClass() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    TEST_UTIL_PEER.shutdownMiniHBaseCluster();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    TEST_UTIL.shutdownMiniDFSCluster();<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>   * Test the default ReplicationSource skips queuing hbase:meta WAL files.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public void testDefaultSkipsMetaWAL() throws IOException {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    ReplicationSource rs = new ReplicationSource();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    String queueId = "qid";<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    RegionServerServices rss =<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    try {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      rs.startup();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      assertTrue(rs.isSourceActive());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      rs.enqueueLog(new Path("a.1"));<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } finally {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      rs.terminate("Done");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      rss.stop("Done");<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * Test that we filter out meta edits, etc.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  @Test<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public void testWALEntryFilter() throws IOException {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    // To get the fully constructed default WALEntryFilter, need to create a ReplicationSource<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // instance and init it.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ReplicationSource rs = new ReplicationSource();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    UUID uuid = UUID.randomUUID();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    String queueId = "qid";<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    RegionServerServices rss =<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId,<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      uuid, p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      rs.startup();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      TEST_UTIL.waitFor(30000, () -&gt; rs.getWalEntryFilter() != null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      WALEntryFilter wef = rs.getWalEntryFilter();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      // Test non-system WAL edit.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      WALEdit we = new WALEdit().add(CellBuilderFactory.create(CellBuilderType.DEEP_COPY).<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        setRow(HConstants.EMPTY_START_ROW).<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        setFamily(HConstants.CATALOG_FAMILY).<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        setType(Cell.Type.Put).build());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      WAL.Entry e = new WAL.Entry(new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY,<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        TableName.valueOf("test"), -1, -1, uuid), we);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      assertTrue(wef.filter(e) == e);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // Test system WAL edit.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      e = new WAL.Entry(<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY, TableName.META_TABLE_NAME, -1, -1, uuid),<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          we);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      assertNull(wef.filter(e));<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    } finally {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      rs.terminate("Done");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      rss.stop("Done");<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><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * Sanity check that we can move logs around while we are reading<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * from them. Should this test fail, ReplicationSource would have a hard<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * time reading logs that are being archived.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  // This tests doesn't belong in here... it is not about ReplicationSource.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  @Test<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public void testLogMoving() throws Exception{<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    Path logPath = new Path(logDir, "log");<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!FS.exists(logDir)) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      FS.mkdirs(logDir);<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    WALProvider.Writer writer = WALFactory.createWALWriter(FS, logPath,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        TEST_UTIL.getConfiguration());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for(int i = 0; i &lt; 3; i++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      byte[] b = Bytes.toBytes(Integer.toString(i));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      KeyValue kv = new KeyValue(b,b,b);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      WALEdit edit = new WALEdit();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      edit.add(kv);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      WALKeyImpl key = new WALKeyImpl(b, TableName.valueOf(b), 0, 0,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          HConstants.DEFAULT_CLUSTER_ID);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      writer.append(new WAL.Entry(key, edit));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      writer.sync(false);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    writer.close();<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>    WAL.Reader reader = WALFactory.createReader(FS, logPath, TEST_UTIL.getConfiguration());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    WAL.Entry entry = reader.next();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertNotNull(entry);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>    Path oldLogPath = new Path(oldLogDir, "log");<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    FS.rename(logPath, oldLogPath);<a name="line.231"></a>
+<span class="sourceLineNo">212</span>    if (!FS.exists(oldLogDir)) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      FS.mkdirs(oldLogDir);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    WALProvider.Writer writer = WALFactory.createWALWriter(FS, logPath,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        TEST_UTIL.getConfiguration());<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(int i = 0; i &lt; 3; i++) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      byte[] b = Bytes.toBytes(Integer.toString(i));<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      KeyValue kv = new KeyValue(b,b,b);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      WALEdit edit = new WALEdit();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      edit.add(kv);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      WALKeyImpl key = new WALKeyImpl(b, TableName.valueOf(b), 0, 0,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          HConstants.DEFAULT_CLUSTER_ID);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      writer.append(new WAL.Entry(key, edit));<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      writer.sync(false);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    writer.close();<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>    WAL.Reader reader = WALFactory.createReader(FS, logPath, TEST_UTIL.getConfiguration());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    WAL.Entry entry = reader.next();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertNotNull(entry);<a name="line.231"></a>
 <span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    entry = reader.next();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    assertNotNull(entry);<a name="line.234"></a>
+<span class="sourceLineNo">233</span>    Path oldLogPath = new Path(oldLogDir, "log");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    FS.rename(logPath, oldLogPath);<a name="line.234"></a>
 <span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    reader.next();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    entry = reader.next();<a name="line.237"></a>
+<span class="sourceLineNo">236</span>    entry = reader.next();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    assertNotNull(entry);<a name="line.237"></a>
 <span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertNull(entry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    reader.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>   * Tests that {@link ReplicationSource#terminate(String)} will timeout properly<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Test<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void testTerminateTimeout() throws Exception {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    ReplicationSource source = new ReplicationSource();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    ReplicationEndpoint<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      replicationEndpoint = new DoNothingReplicationEndpoint();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    try {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      replicationEndpoint.start();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      Configuration testConf = HBaseConfiguration.create();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      testConf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      source.init(testConf, null, manager, null, mockPeer, null, "testPeer",<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        null, p -&gt; OptionalLong.empty(), null);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      ExecutorService executor = Executors.newSingleThreadExecutor();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      Future&lt;?&gt; future = executor.submit(<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        () -&gt; source.terminate("testing source termination"));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      long sleepForRetries = testConf.getLong("replication.source.sleepforretries", 1000);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      Waiter.waitFor(testConf, sleepForRetries * 2, (Waiter.Predicate&lt;Exception&gt;) future::isDone);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    } finally {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      replicationEndpoint.stop();<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><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * Tests that recovered queues are preserved on a regionserver shutdown.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * See HBASE-18192<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @Test<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  public void testServerShutdownRecoveredQueue() throws Exception {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // Ensure single-threaded WAL<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      conf.set("hbase.wal.provider", "defaultProvider");<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      conf.setInt("replication.sleep.before.failover", 2000);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // Introduces a delay in regionserver shutdown to give the race condition a chance to kick in.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      conf.set(HConstants.REGION_SERVER_IMPL, ShutdownDelayRegionServer.class.getName());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster(2);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      TEST_UTIL_PEER.startMiniCluster(1);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      HRegionServer serverA = cluster.getRegionServer(0);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      final ReplicationSourceManager managerA =<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          serverA.getReplicationSourceService().getReplicationManager();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      HRegionServer serverB = cluster.getRegionServer(1);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      final ReplicationSourceManager managerB =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          serverB.getReplicationSourceService().getReplicationManager();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      final Admin admin = TEST_UTIL.getAdmin();<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>      final String peerId = "TestPeer";<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      admin.addReplicationPeer(peerId,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        ReplicationPeerConfig.newBuilder().setClusterKey(TEST_UTIL_PEER.getClusterKey()).build());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Wait for replication sources to come up<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        @Override public boolean evaluate() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          return !(managerA.getSources().isEmpty() || managerB.getSources().isEmpty());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      });<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      // Disabling peer makes sure there is at least one log to claim when the server dies<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      // The recovered queue will also stay there until the peer is disabled even if the<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // WALs it contains have no data.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      admin.disableReplicationPeer(peerId);<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>      // Stopping serverA<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // It's queues should be claimed by the only other alive server i.e. serverB<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      cluster.stopRegionServer(serverA.getServerName());<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        @Override public boolean evaluate() throws Exception {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          return managerB.getOldSources().size() == 1;<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><a name="line.317"></a>
-<span class="sourceLineNo">318</span>      final HRegionServer serverC = cluster.startRegionServer().getRegionServer();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      serverC.waitForServerOnline();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        @Override public boolean evaluate() throws Exception {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          return serverC.getReplicationSourceService() != null;<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>      final ReplicationSourceManager managerC =<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          ((Replication) serverC.getReplicationSourceService()).getReplicationManager();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Sanity check<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      assertEquals(0, managerC.getOldSources().size());<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // Stopping serverB<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      // Now serverC should have two recovered queues:<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      // 1. The serverB's normal queue<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      // 2. serverA's recovered queue on serverB<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      cluster.stopRegionServer(serverB.getServerName());<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      Waiter.waitFor(conf, 20000,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 2);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      admin.enableReplicationPeer(peerId);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      Waiter.waitFor(conf, 20000,<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 0);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      conf.set(HConstants.REGION_SERVER_IMPL, HRegionServer.class.getName());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Regionserver implementation that adds a delay on the graceful shutdown.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public static class ShutdownDelayRegionServer extends HRegionServer {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    public ShutdownDelayRegionServer(Configuration conf) throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">239</span>    reader.next();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    entry = reader.next();<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertNull(entry);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    reader.close();<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>   * Tests that {@link ReplicationSource#terminate(String)} will timeout properly<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  @Test<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  public void testTerminateTimeout() throws Exception {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    ReplicationSource source = new ReplicationSource();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    ReplicationEndpoint<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      replicationEndpoint = new DoNothingReplicationEndpoint();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    try {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      replicationEndpoint.start();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      Configuration testConf = HBaseConfiguration.create();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      testConf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      source.init(testConf, null, manager, null, mockPeer, null, "testPeer",<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        null, p -&gt; OptionalLong.empty(), null);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      ExecutorService executor = Executors.newSingleThreadExecutor();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      Future&lt;?&gt; future = executor.submit(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        () -&gt; source.terminate("testing source termination"));<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      long sleepForRetries = testConf.getLong("replication.source.sleepforretries", 1000);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      Waiter.waitFor(testConf, sleepForRetries * 2, (Waiter.Predicate&lt;Exception&gt;) future::isDone);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    } finally {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      replicationEndpoint.stop();<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>  @Test<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public void testTerminateClearsBuffer() throws Exception {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    ReplicationSource source = new ReplicationSource();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    ReplicationSourceManager mockManager = mock(ReplicationSourceManager.class);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    MetricsReplicationGlobalSourceSource mockMetrics =<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      mock(MetricsReplicationGlobalSourceSource.class);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    AtomicLong buffer = new AtomicLong();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Mockito.when(mockManager.getTotalBufferUsed()).thenReturn(buffer);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Mockito.when(mockManager.getGlobalMetrics()).thenReturn(mockMetrics);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    ReplicationPeer mockPeer = mock(ReplicationPeer.class);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Configuration testConf = HBaseConfiguration.create();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    source.init(testConf, null, mockManager, null, mockPeer, null,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      "testPeer", null, p -&gt; OptionalLong.empty(), mock(MetricsSource.class));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    ReplicationSourceWALReader reader = new ReplicationSourceWALReader(null,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      conf, null, 0, null, source);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    ReplicationSourceShipper shipper =<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      new ReplicationSourceShipper(conf, null, null, source);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    shipper.entryReader = reader;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    source.workerThreads.put("testPeer", shipper);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    WALEntryBatch batch = new WALEntryBatch(10, logDir);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    WAL.Entry mockEntry = mock(WAL.Entry.class);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    WALEdit mockEdit = mock(WALEdit.class);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    WALKeyImpl mockKey = mock(WALKeyImpl.class);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    when(mockEntry.getEdit()).thenReturn(mockEdit);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    when(mockEdit.isEmpty()).thenReturn(false);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    when(mockEntry.getKey()).thenReturn(mockKey);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    when(mockKey.estimatedSerializedSizeOf()).thenReturn(1000L);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    when(mockEdit.heapSize()).thenReturn(10000L);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    when(mockEdit.size()).thenReturn(0);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    ArrayList&lt;Cell&gt; cells = new ArrayList&lt;&gt;();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    KeyValue kv = new KeyValue(Bytes.toBytes("0001"), Bytes.toBytes("f"),<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      Bytes.toBytes("1"), Bytes.toBytes("v1"));<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    cells.add(kv);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    when(mockEdit.getCells()).thenReturn(cells);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    reader.addEntryToBatch(batch, mockEntry);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    reader.entryBatchQueue.put(batch);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    source.terminate("test");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    assertEquals(0, source.getSourceManager().getTotalBufferUsed().get());<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>  /**<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * Tests that recovered queues are preserved on a regionserver shutdown.<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * See HBASE-18192<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  @Test<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public void testServerShutdownRecoveredQueue() throws Exception {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      // Ensure single-threaded WAL<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      conf.set("hbase.wal.provider", "defaultProvider");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      conf.setInt("replication.sleep.before.failover", 2000);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      // Introduces a delay in regionserver shutdown to give the race condition a chance to kick in.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      conf.set(HConstants.REGION_SERVER_IMPL, ShutdownDelayRegionServer.class.getName());<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster(2);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      TEST_UTIL_PEER.startMiniCluster(1);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>      HRegionServer serverA = cluster.getRegionServer(0);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      final ReplicationSourceManager managerA =<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          serverA.getReplicationSourceService().getReplicationManager();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      HRegionServer serverB = cluster.getRegionServer(1);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      final ReplicationSourceManager managerB =<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          serverB.getReplicationSourceService().getReplicationManager();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      final Admin admin = TEST_UTIL.getAdmin();<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final String peerId = "TestPeer";<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      admin.addReplicationPeer(peerId,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        ReplicationPeerConfig.newBuilder().setClusterKey(TEST_UTIL_PEER.getClusterKey()).build());<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      // Wait for replication sources to come up<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        @Override public boolean evaluate() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          return !(managerA.getSources().isEmpty() || managerB.getSources().isEmpty());<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>      // Disabling peer makes sure there is at least one log to claim when the server dies<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      // The recovered queue will also stay there until the peer is disabled even if the<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      // WALs it contains have no data.<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      admin.disableReplicationPeer(peerId);<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>    protected void stopServiceThreads() {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // Add a delay before service threads are shutdown.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      // This will keep the zookeeper connection alive for the duration of the delay.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      LOG.info("Adding a delay to the regionserver shutdown");<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        Thread.sleep(2000);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      } catch (InterruptedException ex) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.error("Interrupted while sleeping");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      super.stopServiceThreads();<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>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * Deadend Endpoint. Does nothing.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public static class DoNothingReplicationEndpoint extends HBaseInterClusterReplicationEndpoint {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    private final UUID uuid = UUID.randomUUID();<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    @Override public void init(Context context) throws IOException {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      this.ctx = context;<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 public WALEntryFilter getWALEntryfilter() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return null;<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 public synchronized UUID getPeerUUID() {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      return this.uuid;<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>    @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    protected void doStart() {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      notifyStarted();<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>    @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    protected void doStop() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      notifyStopped();<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>    @Override public boolean canReplicateToSameCluster() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return true;<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><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  /**<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Deadend Endpoint. Does nothing.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class FaultyReplicationEndpoint extends DoNothingReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static int count = 0;<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public synchronized UUID getPeerUUID() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if(count==0) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        count++;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        throw new RuntimeException();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } else {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        return super.getPeerUUID();<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">353</span>      // Stopping serverA<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      // It's queues should be claimed by the only other alive server i.e. serverB<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      cluster.stopRegionServer(serverA.getServerName());<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        @Override public boolean evaluate() throws Exception {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          return managerB.getOldSources().size() == 1;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      });<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>      final HRegionServer serverC = cluster.startRegionServer().getRegionServer();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      serverC.waitForServerOnline();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        @Override public boolean evaluate() throws Exception {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          return serverC.getReplicationSourceService() != null;<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>      final ReplicationSourceManager managerC =<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          ((Replication) serverC.getReplicationSourceService()).getReplicationManager();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      // Sanity check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      assertEquals(0, managerC.getOldSources().size());<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // Stopping serverB<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      // Now serverC should have two recovered queues:<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      // 1. The serverB's normal queue<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      // 2. serverA's recovered queue on serverB<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      cluster.stopRegionServer(serverB.getServerName());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      Waiter.waitFor(conf, 20000,<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 2);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      admin.enableReplicationPeer(peerId);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Waiter.waitFor(conf, 20000,<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 0);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      conf.set(HConstants.REGION_SERVER_IMPL, HRegionServer.class.getName());<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>  /**<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * Regionserver implementation that adds a delay on the graceful shutdown.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   */<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  public static class ShutdownDelayRegionServer extends HRegionServer {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    public ShutdownDelayRegionServer(Configuration conf) throws IOException {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      super(conf);<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>    @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    protected void stopServiceThreads() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      // Add a delay before service threads are shutdown.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      // This will keep the zookeeper connection alive for the duration of the delay.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      LOG.info("Adding a delay to the regionserver shutdown");<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Thread.sleep(2000);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      } catch (InterruptedException ex) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        LOG.error("Interrupted while sleeping");<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super.stopServiceThreads();<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>   * Deadend Endpoint. Does nothing.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public static class DoNothingReplicationEndpoint extends HBaseInterClusterReplicationEndpoint {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    private final UUID uuid = UUID.randomUUID();<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><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * Test HBASE-20497<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  @Test<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public void testRecoveredReplicationSourceShipperGetPosition() throws Exception {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    String walGroupId = "fake-wal-group-id";<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    ServerName serverName = ServerName.valueOf("www.example.com", 12006, 1524679704418L);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    ServerName deadServer = ServerName.valueOf("www.deadServer.com", 12006, 1524679704419L);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    PriorityBlockingQueue&lt;Path&gt; queue = new PriorityBlockingQueue&lt;&gt;();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    queue.put(new Path("/www/html/test"));<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    RecoveredReplicationSource source = Mockito.mock(RecoveredReplicationSource.class);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Server server = Mockito.mock(Server.class);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    Mockito.when(server.getServerName()).thenReturn(serverName);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    Mockito.when(source.getServer()).thenReturn(server);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Mockito.when(source.getServerWALsBelongTo()).thenReturn(deadServer);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    ReplicationQueueStorage storage = Mockito.mock(ReplicationQueueStorage.class);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    Mockito.when(storage.getWALPosition(Mockito.eq(serverName), Mockito.any(), Mockito.any()))<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      .thenReturn(1001L);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    Mockito.when(storage.getWALPosition(Mockito.eq(deadServer), Mockito.any(), Mockito.any()))<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      .thenReturn(-1L);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    conf.setInt("replication.source.maxretriesmultiplier", -1);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    RecoveredReplicationSourceShipper shipper =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      new RecoveredReplicationSourceShipper(conf, walGroupId, queue, source, storage);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    assertEquals(1001L, shipper.getStartPosition());<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * during initialization and &lt;b&gt;eplication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Test<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public void testAbortFalseOnError() throws IOException {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    ReplicationSource rs = new ReplicationSource();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    conf.setBoolean("replication.source.regionserver.abort", false);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    String queueId = "qid";<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    RegionServerServices rss =<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    try {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      rs.startup();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      assertTrue(rs.isSourceActive());<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      rs.enqueueLog(new Path("a.1"));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    } finally {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      rs.terminate("Done");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      rss.stop("Done");<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * during initialization and &lt;b&gt;replication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   */<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  @Test<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  public void testAbortTrueOnError() throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    ReplicationSource rs = new ReplicationSource();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    String queueId = "qid";<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    RegionServerServices rss =<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    try {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      rs.startup();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      Waiter.waitFor(conf, 1000, () -&gt; FaultyReplicationEndpoint.count &gt; 0);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      assertFalse(rs.isSourceActive());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      assertTrue(rss.isAborted());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } finally {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      rs.terminate("Done");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      rss.stop("Done");<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>}<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">417</span>    @Override public void init(Context context) throws IOException {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      this.ctx = context;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    @Override public WALEntryFilter getWALEntryfilter() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return null;<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>    @Override public synchronized UUID getPeerUUID() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      return this.uuid;<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>    @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    protected void doStart() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      notifyStarted();<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>    protected void doStop() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      notifyStopped();<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 public boolean canReplicateToSameCluster() {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      return true;<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>  /**<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * Deadend Endpoint. Does nothing.<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  public static class FaultyReplicationEndpoint extends DoNothingReplicationEndpoint {<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>    static int count = 0;<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 synchronized UUID getPeerUUID() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      if(count==0) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        count++;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        throw new RuntimeException();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        return super.getPeerUUID();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  }<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>   * Test HBASE-20497<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  @Test<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public void testRecoveredReplicationSourceShipperGetPosition() throws Exception {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    String walGroupId = "fake-wal-group-id";<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    ServerName serverName = ServerName.valueOf("www.example.com", 12006, 1524679704418L);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    ServerName deadServer = ServerName.valueOf("www.deadServer.com", 12006, 1524679704419L);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    PriorityBlockingQueue&lt;Path&gt; queue = new PriorityBlockingQueue&lt;&gt;();<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    queue.put(new Path("/www/html/test"));<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    RecoveredReplicationSource source = mock(RecoveredReplicationSource.class);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    Server server = mock(Server.class);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    Mockito.when(server.getServerName()).thenReturn(serverName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    Mockito.when(source.getServer()).thenReturn(server);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    Mockito.when(source.getServerWALsBelongTo()).thenReturn(deadServer);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    ReplicationQueueStorage storage = mock(ReplicationQueueStorage.class);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    Mockito.when(storage.getWALPosition(Mockito.eq(serverName), Mockito.any(), Mockito.any()))<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      .thenReturn(1001L);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    Mockito.when(storage.getWALPosition(Mockito.eq(deadServer), Mockito.any(), Mockito.any()))<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      .thenReturn(-1L);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    conf.setInt("replication.source.maxretriesmultiplier", -1);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    RecoveredReplicationSourceShipper shipper =<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      new RecoveredReplicationSourceShipper(conf, walGroupId, queue, source, storage);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    assertEquals(1001L, shipper.getStartPosition());<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * during initialization and &lt;b&gt;eplication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   */<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  @Test<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  public void testAbortFalseOnError() throws IOException {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    ReplicationSource rs = new ReplicationSource();<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    conf.setBoolean("replication.source.regionserver.abort", false);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    String queueId = "qid";<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    RegionServerServices rss =<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    try {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      rs.startup();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      assertTrue(rs.isSourceActive());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      rs.enqueueLog(new Path("a.1"));<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    } finally {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      rs.terminate("Done");<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      rss.stop("Done");<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * during initialization and &lt;b&gt;replication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  @Test<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public void testAbortTrueOnError() throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    ReplicationSource rs = new ReplicationSource();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    String queueId = "qid";<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    RegionServerServices rss =<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    try {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      rs.startup();<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      Waiter.waitFor(conf, 1000, () -&gt; FaultyReplicationEndpoint.count &gt; 0);<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      assertFalse(rs.isSourceActive());<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      assertTrue(rss.isAborted());<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    } finally {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      rs.terminate("Done");<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      rss.stop("Done");<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>}<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html
index 8db2bac..2e672b7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/replication/regionserver/TestReplicationSource.html
@@ -30,501 +30,545 @@
 <span class="sourceLineNo">022</span>import static org.junit.Assert.assertNotNull;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import static org.junit.Assert.assertNull;<a name="line.23"></a>
 <span class="sourceLineNo">024</span>import static org.junit.Assert.assertTrue;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import java.util.OptionalLong;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import java.util.UUID;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import java.util.concurrent.ExecutorService;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import java.util.concurrent.Executors;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import java.util.concurrent.Future;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.hadoop.conf.Configuration;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.fs.FileSystem;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.fs.Path;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.Cell;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.CellBuilderFactory;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.CellBuilderType;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HConstants;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.KeyValue;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.Server;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.ServerName;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.TableName;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Waiter;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.WALEntryFilter;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.junit.AfterClass;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.junit.BeforeClass;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.junit.ClassRule;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.junit.Test;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.junit.experimental.categories.Category;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.mockito.Mockito;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.slf4j.Logger;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.slf4j.LoggerFactory;<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>@Category({ReplicationTests.class, MediumTests.class})<a name="line.74"></a>
-<span class="sourceLineNo">075</span>public class TestReplicationSource {<a name="line.75"></a>
+<span class="sourceLineNo">025</span>import static org.mockito.Mockito.mock;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import static org.mockito.Mockito.when;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import java.io.IOException;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import java.util.ArrayList;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import java.util.OptionalLong;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import java.util.UUID;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import java.util.concurrent.ExecutorService;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import java.util.concurrent.Executors;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import java.util.concurrent.Future;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import java.util.concurrent.PriorityBlockingQueue;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.conf.Configuration;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.fs.FileSystem;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.fs.Path;<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.CellBuilderFactory;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.CellBuilderType;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.HBaseClassTestRule;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<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.KeyValue;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.Server;<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.Waiter;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.hbase.regionserver.RegionServerServices;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.hbase.replication.ReplicationEndpoint;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.hbase.replication.ReplicationPeer;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.hbase.replication.ReplicationPeerConfig;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.replication.ReplicationQueueStorage;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.replication.WALEntryFilter;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.testclassification.MediumTests;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.testclassification.ReplicationTests;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.wal.WALProvider;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.junit.AfterClass;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.junit.BeforeClass;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.junit.ClassRule;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.junit.Test;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.junit.experimental.categories.Category;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.mockito.Mockito;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.slf4j.Logger;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.slf4j.LoggerFactory;<a name="line.75"></a>
 <span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  @ClassRule<a name="line.77"></a>
-<span class="sourceLineNo">078</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.78"></a>
-<span class="sourceLineNo">079</span>      HBaseClassTestRule.forClass(TestReplicationSource.class);<a name="line.79"></a>
-<span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  private static final Logger LOG =<a name="line.81"></a>
-<span class="sourceLineNo">082</span>      LoggerFactory.getLogger(TestReplicationSource.class);<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  private final static HBaseTestingUtility TEST_UTIL =<a name="line.83"></a>
-<span class="sourceLineNo">084</span>      new HBaseTestingUtility();<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  private final static HBaseTestingUtility TEST_UTIL_PEER =<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      new HBaseTestingUtility();<a name="line.86"></a>
-<span class="sourceLineNo">087</span>  private static FileSystem FS;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  private static Path oldLogDir;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>  private static Path logDir;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  private static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  @BeforeClass<a name="line.92"></a>
-<span class="sourceLineNo">093</span>  public static void setUpBeforeClass() throws Exception {<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.94"></a>
-<span class="sourceLineNo">095</span>    FS = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    Path rootDir = TEST_UTIL.createRootDir();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.97"></a>
-<span class="sourceLineNo">098</span>    if (FS.exists(oldLogDir)) {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>      FS.delete(oldLogDir, true);<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    }<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    if (FS.exists(logDir)) {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      FS.delete(logDir, 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>  @AfterClass<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  public static void tearDownAfterClass() throws Exception {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    TEST_UTIL_PEER.shutdownMiniHBaseCluster();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    TEST_UTIL.shutdownMiniDFSCluster();<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  }<a name="line.112"></a>
-<span class="sourceLineNo">113</span><a name="line.113"></a>
-<span class="sourceLineNo">114</span>  /**<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * Test the default ReplicationSource skips queuing hbase:meta WAL files.<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   */<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  @Test<a name="line.117"></a>
-<span class="sourceLineNo">118</span>  public void testDefaultSkipsMetaWAL() throws IOException {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    ReplicationSource rs = new ReplicationSource();<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.121"></a>
-<span class="sourceLineNo">122</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    String queueId = "qid";<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    RegionServerServices rss =<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    try {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      rs.startup();<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      assertTrue(rs.isSourceActive());<a name="line.138"></a>
-<span class="sourceLineNo">139</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.139"></a>
-<span class="sourceLineNo">140</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.140"></a>
-<span class="sourceLineNo">141</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      rs.enqueueLog(new Path("a.1"));<a name="line.142"></a>
-<span class="sourceLineNo">143</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    } finally {<a name="line.144"></a>
-<span class="sourceLineNo">145</span>      rs.terminate("Done");<a name="line.145"></a>
-<span class="sourceLineNo">146</span>      rss.stop("Done");<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>  /**<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * Test that we filter out meta edits, etc.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
-<span class="sourceLineNo">153</span>  @Test<a name="line.153"></a>
-<span class="sourceLineNo">154</span>  public void testWALEntryFilter() throws IOException {<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    // To get the fully constructed default WALEntryFilter, need to create a ReplicationSource<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    // instance and init it.<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    ReplicationSource rs = new ReplicationSource();<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    UUID uuid = UUID.randomUUID();<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    String queueId = "qid";<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    RegionServerServices rss =<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId,<a name="line.172"></a>
-<span class="sourceLineNo">173</span>      uuid, p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    try {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>      rs.startup();<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      TEST_UTIL.waitFor(30000, () -&gt; rs.getWalEntryFilter() != null);<a name="line.176"></a>
-<span class="sourceLineNo">177</span>      WALEntryFilter wef = rs.getWalEntryFilter();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      // Test non-system WAL edit.<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      WALEdit we = new WALEdit().add(CellBuilderFactory.create(CellBuilderType.DEEP_COPY).<a name="line.179"></a>
-<span class="sourceLineNo">180</span>        setRow(HConstants.EMPTY_START_ROW).<a name="line.180"></a>
-<span class="sourceLineNo">181</span>        setFamily(HConstants.CATALOG_FAMILY).<a name="line.181"></a>
-<span class="sourceLineNo">182</span>        setType(Cell.Type.Put).build());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      WAL.Entry e = new WAL.Entry(new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY,<a name="line.183"></a>
-<span class="sourceLineNo">184</span>        TableName.valueOf("test"), -1, -1, uuid), we);<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      assertTrue(wef.filter(e) == e);<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      // Test system WAL edit.<a name="line.186"></a>
-<span class="sourceLineNo">187</span>      e = new WAL.Entry(<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY, TableName.META_TABLE_NAME, -1, -1, uuid),<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          we);<a name="line.189"></a>
-<span class="sourceLineNo">190</span>      assertNull(wef.filter(e));<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    } finally {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      rs.terminate("Done");<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      rss.stop("Done");<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>   * Sanity check that we can move logs around while we are reading<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   * from them. Should this test fail, ReplicationSource would have a hard<a name="line.199"></a>
-<span class="sourceLineNo">200</span>   * time reading logs that are being archived.<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   */<a name="line.201"></a>
-<span class="sourceLineNo">202</span>  // This tests doesn't belong in here... it is not about ReplicationSource.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  @Test<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  public void testLogMoving() throws Exception{<a name="line.204"></a>
-<span class="sourceLineNo">205</span>    Path logPath = new Path(logDir, "log");<a name="line.205"></a>
-<span class="sourceLineNo">206</span>    if (!FS.exists(logDir)) {<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      FS.mkdirs(logDir);<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    }<a name="line.208"></a>
-<span class="sourceLineNo">209</span>    if (!FS.exists(oldLogDir)) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      FS.mkdirs(oldLogDir);<a name="line.210"></a>
+<span class="sourceLineNo">077</span>@Category({ReplicationTests.class, MediumTests.class})<a name="line.77"></a>
+<span class="sourceLineNo">078</span>public class TestReplicationSource {<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  @ClassRule<a name="line.80"></a>
+<span class="sourceLineNo">081</span>  public static final HBaseClassTestRule CLASS_RULE =<a name="line.81"></a>
+<span class="sourceLineNo">082</span>      HBaseClassTestRule.forClass(TestReplicationSource.class);<a name="line.82"></a>
+<span class="sourceLineNo">083</span><a name="line.83"></a>
+<span class="sourceLineNo">084</span>  private static final Logger LOG =<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      LoggerFactory.getLogger(TestReplicationSource.class);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>  private final static HBaseTestingUtility TEST_UTIL =<a name="line.86"></a>
+<span class="sourceLineNo">087</span>      new HBaseTestingUtility();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  private final static HBaseTestingUtility TEST_UTIL_PEER =<a name="line.88"></a>
+<span class="sourceLineNo">089</span>      new HBaseTestingUtility();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>  private static FileSystem FS;<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  private static Path oldLogDir;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  private static Path logDir;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  private static Configuration conf = TEST_UTIL.getConfiguration();<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  @BeforeClass<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public static void setUpBeforeClass() throws Exception {<a name="line.96"></a>
+<span class="sourceLineNo">097</span>    TEST_UTIL.startMiniDFSCluster(1);<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    FS = TEST_UTIL.getDFSCluster().getFileSystem();<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    Path rootDir = TEST_UTIL.createRootDir();<a name="line.99"></a>
+<span class="sourceLineNo">100</span>    oldLogDir = new Path(rootDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    if (FS.exists(oldLogDir)) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      FS.delete(oldLogDir, true);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    logDir = new Path(rootDir, HConstants.HREGION_LOGDIR_NAME);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    if (FS.exists(logDir)) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      FS.delete(logDir, true);<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>  @AfterClass<a name="line.110"></a>
+<span class="sourceLineNo">111</span>  public static void tearDownAfterClass() throws Exception {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    TEST_UTIL_PEER.shutdownMiniHBaseCluster();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    TEST_UTIL.shutdownMiniHBaseCluster();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    TEST_UTIL.shutdownMiniDFSCluster();<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>   * Test the default ReplicationSource skips queuing hbase:meta WAL files.<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @Test<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public void testDefaultSkipsMetaWAL() throws IOException {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    ReplicationSource rs = new ReplicationSource();<a name="line.122"></a>
+<span class="sourceLineNo">123</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.124"></a>
+<span class="sourceLineNo">125</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.129"></a>
+<span class="sourceLineNo">130</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    String queueId = "qid";<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    RegionServerServices rss =<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.136"></a>
+<span class="sourceLineNo">137</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.137"></a>
+<span class="sourceLineNo">138</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    try {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>      rs.startup();<a name="line.140"></a>
+<span class="sourceLineNo">141</span>      assertTrue(rs.isSourceActive());<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.142"></a>
+<span class="sourceLineNo">143</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.143"></a>
+<span class="sourceLineNo">144</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.144"></a>
+<span class="sourceLineNo">145</span>      rs.enqueueLog(new Path("a.1"));<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    } finally {<a name="line.147"></a>
+<span class="sourceLineNo">148</span>      rs.terminate("Done");<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      rss.stop("Done");<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    }<a name="line.150"></a>
+<span class="sourceLineNo">151</span>  }<a name="line.151"></a>
+<span class="sourceLineNo">152</span><a name="line.152"></a>
+<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   * Test that we filter out meta edits, etc.<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  @Test<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  public void testWALEntryFilter() throws IOException {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>    // To get the fully constructed default WALEntryFilter, need to create a ReplicationSource<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // instance and init it.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    ReplicationSource rs = new ReplicationSource();<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    UUID uuid = UUID.randomUUID();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.164"></a>
+<span class="sourceLineNo">165</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.166"></a>
+<span class="sourceLineNo">167</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      thenReturn(DoNothingReplicationEndpoint.class.getName());<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.169"></a>
+<span class="sourceLineNo">170</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    String queueId = "qid";<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    RegionServerServices rss =<a name="line.173"></a>
+<span class="sourceLineNo">174</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId,<a name="line.175"></a>
+<span class="sourceLineNo">176</span>      uuid, p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    try {<a name="line.177"></a>
+<span class="sourceLineNo">178</span>      rs.startup();<a name="line.178"></a>
+<span class="sourceLineNo">179</span>      TEST_UTIL.waitFor(30000, () -&gt; rs.getWalEntryFilter() != null);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      WALEntryFilter wef = rs.getWalEntryFilter();<a name="line.180"></a>
+<span class="sourceLineNo">181</span>      // Test non-system WAL edit.<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      WALEdit we = new WALEdit().add(CellBuilderFactory.create(CellBuilderType.DEEP_COPY).<a name="line.182"></a>
+<span class="sourceLineNo">183</span>        setRow(HConstants.EMPTY_START_ROW).<a name="line.183"></a>
+<span class="sourceLineNo">184</span>        setFamily(HConstants.CATALOG_FAMILY).<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        setType(Cell.Type.Put).build());<a name="line.185"></a>
+<span class="sourceLineNo">186</span>      WAL.Entry e = new WAL.Entry(new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY,<a name="line.186"></a>
+<span class="sourceLineNo">187</span>        TableName.valueOf("test"), -1, -1, uuid), we);<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      assertTrue(wef.filter(e) == e);<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      // Test system WAL edit.<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      e = new WAL.Entry(<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        new WALKeyImpl(HConstants.EMPTY_BYTE_ARRAY, TableName.META_TABLE_NAME, -1, -1, uuid),<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          we);<a name="line.192"></a>
+<span class="sourceLineNo">193</span>      assertNull(wef.filter(e));<a name="line.193"></a>
+<span class="sourceLineNo">194</span>    } finally {<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      rs.terminate("Done");<a name="line.195"></a>
+<span class="sourceLineNo">196</span>      rss.stop("Done");<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><a name="line.199"></a>
+<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * Sanity check that we can move logs around while we are reading<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * from them. Should this test fail, ReplicationSource would have a hard<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   * time reading logs that are being archived.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>   */<a name="line.204"></a>
+<span class="sourceLineNo">205</span>  // This tests doesn't belong in here... it is not about ReplicationSource.<a name="line.205"></a>
+<span class="sourceLineNo">206</span>  @Test<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  public void testLogMoving() throws Exception{<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    Path logPath = new Path(logDir, "log");<a name="line.208"></a>
+<span class="sourceLineNo">209</span>    if (!FS.exists(logDir)) {<a name="line.209"></a>
+<span class="sourceLineNo">210</span>      FS.mkdirs(logDir);<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    WALProvider.Writer writer = WALFactory.createWALWriter(FS, logPath,<a name="line.212"></a>
-<span class="sourceLineNo">213</span>        TEST_UTIL.getConfiguration());<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    for(int i = 0; i &lt; 3; i++) {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      byte[] b = Bytes.toBytes(Integer.toString(i));<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      KeyValue kv = new KeyValue(b,b,b);<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      WALEdit edit = new WALEdit();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      edit.add(kv);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      WALKeyImpl key = new WALKeyImpl(b, TableName.valueOf(b), 0, 0,<a name="line.219"></a>
-<span class="sourceLineNo">220</span>          HConstants.DEFAULT_CLUSTER_ID);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>      writer.append(new WAL.Entry(key, edit));<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      writer.sync(false);<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    writer.close();<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>    WAL.Reader reader = WALFactory.createReader(FS, logPath, TEST_UTIL.getConfiguration());<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    WAL.Entry entry = reader.next();<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assertNotNull(entry);<a name="line.228"></a>
-<span class="sourceLineNo">229</span><a name="line.229"></a>
-<span class="sourceLineNo">230</span>    Path oldLogPath = new Path(oldLogDir, "log");<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    FS.rename(logPath, oldLogPath);<a name="line.231"></a>
+<span class="sourceLineNo">212</span>    if (!FS.exists(oldLogDir)) {<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      FS.mkdirs(oldLogDir);<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    }<a name="line.214"></a>
+<span class="sourceLineNo">215</span>    WALProvider.Writer writer = WALFactory.createWALWriter(FS, logPath,<a name="line.215"></a>
+<span class="sourceLineNo">216</span>        TEST_UTIL.getConfiguration());<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    for(int i = 0; i &lt; 3; i++) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      byte[] b = Bytes.toBytes(Integer.toString(i));<a name="line.218"></a>
+<span class="sourceLineNo">219</span>      KeyValue kv = new KeyValue(b,b,b);<a name="line.219"></a>
+<span class="sourceLineNo">220</span>      WALEdit edit = new WALEdit();<a name="line.220"></a>
+<span class="sourceLineNo">221</span>      edit.add(kv);<a name="line.221"></a>
+<span class="sourceLineNo">222</span>      WALKeyImpl key = new WALKeyImpl(b, TableName.valueOf(b), 0, 0,<a name="line.222"></a>
+<span class="sourceLineNo">223</span>          HConstants.DEFAULT_CLUSTER_ID);<a name="line.223"></a>
+<span class="sourceLineNo">224</span>      writer.append(new WAL.Entry(key, edit));<a name="line.224"></a>
+<span class="sourceLineNo">225</span>      writer.sync(false);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    writer.close();<a name="line.227"></a>
+<span class="sourceLineNo">228</span><a name="line.228"></a>
+<span class="sourceLineNo">229</span>    WAL.Reader reader = WALFactory.createReader(FS, logPath, TEST_UTIL.getConfiguration());<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    WAL.Entry entry = reader.next();<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assertNotNull(entry);<a name="line.231"></a>
 <span class="sourceLineNo">232</span><a name="line.232"></a>
-<span class="sourceLineNo">233</span>    entry = reader.next();<a name="line.233"></a>
-<span class="sourceLineNo">234</span>    assertNotNull(entry);<a name="line.234"></a>
+<span class="sourceLineNo">233</span>    Path oldLogPath = new Path(oldLogDir, "log");<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    FS.rename(logPath, oldLogPath);<a name="line.234"></a>
 <span class="sourceLineNo">235</span><a name="line.235"></a>
-<span class="sourceLineNo">236</span>    reader.next();<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    entry = reader.next();<a name="line.237"></a>
+<span class="sourceLineNo">236</span>    entry = reader.next();<a name="line.236"></a>
+<span class="sourceLineNo">237</span>    assertNotNull(entry);<a name="line.237"></a>
 <span class="sourceLineNo">238</span><a name="line.238"></a>
-<span class="sourceLineNo">239</span>    assertNull(entry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>    reader.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>   * Tests that {@link ReplicationSource#terminate(String)} will timeout properly<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   */<a name="line.246"></a>
-<span class="sourceLineNo">247</span>  @Test<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  public void testTerminateTimeout() throws Exception {<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    ReplicationSource source = new ReplicationSource();<a name="line.249"></a>
-<span class="sourceLineNo">250</span>    ReplicationEndpoint<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      replicationEndpoint = new DoNothingReplicationEndpoint();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>    try {<a name="line.252"></a>
-<span class="sourceLineNo">253</span>      replicationEndpoint.start();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>      Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      Configuration testConf = HBaseConfiguration.create();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>      testConf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>      ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.258"></a>
-<span class="sourceLineNo">259</span>      Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      source.init(testConf, null, manager, null, mockPeer, null, "testPeer",<a name="line.260"></a>
-<span class="sourceLineNo">261</span>        null, p -&gt; OptionalLong.empty(), null);<a name="line.261"></a>
-<span class="sourceLineNo">262</span>      ExecutorService executor = Executors.newSingleThreadExecutor();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      Future&lt;?&gt; future = executor.submit(<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        () -&gt; source.terminate("testing source termination"));<a name="line.264"></a>
-<span class="sourceLineNo">265</span>      long sleepForRetries = testConf.getLong("replication.source.sleepforretries", 1000);<a name="line.265"></a>
-<span class="sourceLineNo">266</span>      Waiter.waitFor(testConf, sleepForRetries * 2, (Waiter.Predicate&lt;Exception&gt;) future::isDone);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>    } finally {<a name="line.267"></a>
-<span class="sourceLineNo">268</span>      replicationEndpoint.stop();<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><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  /**<a name="line.272"></a>
-<span class="sourceLineNo">273</span>   * Tests that recovered queues are preserved on a regionserver shutdown.<a name="line.273"></a>
-<span class="sourceLineNo">274</span>   * See HBASE-18192<a name="line.274"></a>
-<span class="sourceLineNo">275</span>   */<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  @Test<a name="line.276"></a>
-<span class="sourceLineNo">277</span>  public void testServerShutdownRecoveredQueue() throws Exception {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>    try {<a name="line.278"></a>
-<span class="sourceLineNo">279</span>      // Ensure single-threaded WAL<a name="line.279"></a>
-<span class="sourceLineNo">280</span>      conf.set("hbase.wal.provider", "defaultProvider");<a name="line.280"></a>
-<span class="sourceLineNo">281</span>      conf.setInt("replication.sleep.before.failover", 2000);<a name="line.281"></a>
-<span class="sourceLineNo">282</span>      // Introduces a delay in regionserver shutdown to give the race condition a chance to kick in.<a name="line.282"></a>
-<span class="sourceLineNo">283</span>      conf.set(HConstants.REGION_SERVER_IMPL, ShutdownDelayRegionServer.class.getName());<a name="line.283"></a>
-<span class="sourceLineNo">284</span>      MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster(2);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>      TEST_UTIL_PEER.startMiniCluster(1);<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>      HRegionServer serverA = cluster.getRegionServer(0);<a name="line.287"></a>
-<span class="sourceLineNo">288</span>      final ReplicationSourceManager managerA =<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          serverA.getReplicationSourceService().getReplicationManager();<a name="line.289"></a>
-<span class="sourceLineNo">290</span>      HRegionServer serverB = cluster.getRegionServer(1);<a name="line.290"></a>
-<span class="sourceLineNo">291</span>      final ReplicationSourceManager managerB =<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          serverB.getReplicationSourceService().getReplicationManager();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>      final Admin admin = TEST_UTIL.getAdmin();<a name="line.293"></a>
-<span class="sourceLineNo">294</span><a name="line.294"></a>
-<span class="sourceLineNo">295</span>      final String peerId = "TestPeer";<a name="line.295"></a>
-<span class="sourceLineNo">296</span>      admin.addReplicationPeer(peerId,<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        ReplicationPeerConfig.newBuilder().setClusterKey(TEST_UTIL_PEER.getClusterKey()).build());<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      // Wait for replication sources to come up<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.299"></a>
-<span class="sourceLineNo">300</span>        @Override public boolean evaluate() {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>          return !(managerA.getSources().isEmpty() || managerB.getSources().isEmpty());<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        }<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      });<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      // Disabling peer makes sure there is at least one log to claim when the server dies<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      // The recovered queue will also stay there until the peer is disabled even if the<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      // WALs it contains have no data.<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      admin.disableReplicationPeer(peerId);<a name="line.307"></a>
-<span class="sourceLineNo">308</span><a name="line.308"></a>
-<span class="sourceLineNo">309</span>      // Stopping serverA<a name="line.309"></a>
-<span class="sourceLineNo">310</span>      // It's queues should be claimed by the only other alive server i.e. serverB<a name="line.310"></a>
-<span class="sourceLineNo">311</span>      cluster.stopRegionServer(serverA.getServerName());<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        @Override public boolean evaluate() throws Exception {<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          return managerB.getOldSources().size() == 1;<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><a name="line.317"></a>
-<span class="sourceLineNo">318</span>      final HRegionServer serverC = cluster.startRegionServer().getRegionServer();<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      serverC.waitForServerOnline();<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        @Override public boolean evaluate() throws Exception {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>          return serverC.getReplicationSourceService() != null;<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>      final ReplicationSourceManager managerC =<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          ((Replication) serverC.getReplicationSourceService()).getReplicationManager();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>      // Sanity check<a name="line.327"></a>
-<span class="sourceLineNo">328</span>      assertEquals(0, managerC.getOldSources().size());<a name="line.328"></a>
-<span class="sourceLineNo">329</span><a name="line.329"></a>
-<span class="sourceLineNo">330</span>      // Stopping serverB<a name="line.330"></a>
-<span class="sourceLineNo">331</span>      // Now serverC should have two recovered queues:<a name="line.331"></a>
-<span class="sourceLineNo">332</span>      // 1. The serverB's normal queue<a name="line.332"></a>
-<span class="sourceLineNo">333</span>      // 2. serverA's recovered queue on serverB<a name="line.333"></a>
-<span class="sourceLineNo">334</span>      cluster.stopRegionServer(serverB.getServerName());<a name="line.334"></a>
-<span class="sourceLineNo">335</span>      Waiter.waitFor(conf, 20000,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 2);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      admin.enableReplicationPeer(peerId);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>      Waiter.waitFor(conf, 20000,<a name="line.338"></a>
-<span class="sourceLineNo">339</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 0);<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      conf.set(HConstants.REGION_SERVER_IMPL, HRegionServer.class.getName());<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    }<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
-<span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * Regionserver implementation that adds a delay on the graceful shutdown.<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   */<a name="line.347"></a>
-<span class="sourceLineNo">348</span>  public static class ShutdownDelayRegionServer extends HRegionServer {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    public ShutdownDelayRegionServer(Configuration conf) throws IOException {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      super(conf);<a name="line.350"></a>
-<span class="sourceLineNo">351</span>    }<a name="line.351"></a>
+<span class="sourceLineNo">239</span>    reader.next();<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    entry = reader.next();<a name="line.240"></a>
+<span class="sourceLineNo">241</span><a name="line.241"></a>
+<span class="sourceLineNo">242</span>    assertNull(entry);<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    reader.close();<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>   * Tests that {@link ReplicationSource#terminate(String)} will timeout properly<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   */<a name="line.249"></a>
+<span class="sourceLineNo">250</span>  @Test<a name="line.250"></a>
+<span class="sourceLineNo">251</span>  public void testTerminateTimeout() throws Exception {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>    ReplicationSource source = new ReplicationSource();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>    ReplicationEndpoint<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      replicationEndpoint = new DoNothingReplicationEndpoint();<a name="line.254"></a>
+<span class="sourceLineNo">255</span>    try {<a name="line.255"></a>
+<span class="sourceLineNo">256</span>      replicationEndpoint.start();<a name="line.256"></a>
+<span class="sourceLineNo">257</span>      ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      Configuration testConf = HBaseConfiguration.create();<a name="line.259"></a>
+<span class="sourceLineNo">260</span>      testConf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.260"></a>
+<span class="sourceLineNo">261</span>      ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>      Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.262"></a>
+<span class="sourceLineNo">263</span>      source.init(testConf, null, manager, null, mockPeer, null, "testPeer",<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        null, p -&gt; OptionalLong.empty(), null);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      ExecutorService executor = Executors.newSingleThreadExecutor();<a name="line.265"></a>
+<span class="sourceLineNo">266</span>      Future&lt;?&gt; future = executor.submit(<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        () -&gt; source.terminate("testing source termination"));<a name="line.267"></a>
+<span class="sourceLineNo">268</span>      long sleepForRetries = testConf.getLong("replication.source.sleepforretries", 1000);<a name="line.268"></a>
+<span class="sourceLineNo">269</span>      Waiter.waitFor(testConf, sleepForRetries * 2, (Waiter.Predicate&lt;Exception&gt;) future::isDone);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    } finally {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      replicationEndpoint.stop();<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>  @Test<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public void testTerminateClearsBuffer() throws Exception {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    ReplicationSource source = new ReplicationSource();<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    ReplicationSourceManager mockManager = mock(ReplicationSourceManager.class);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    MetricsReplicationGlobalSourceSource mockMetrics =<a name="line.279"></a>
+<span class="sourceLineNo">280</span>      mock(MetricsReplicationGlobalSourceSource.class);<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    AtomicLong buffer = new AtomicLong();<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    Mockito.when(mockManager.getTotalBufferUsed()).thenReturn(buffer);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    Mockito.when(mockManager.getGlobalMetrics()).thenReturn(mockMetrics);<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    ReplicationPeer mockPeer = mock(ReplicationPeer.class);<a name="line.284"></a>
+<span class="sourceLineNo">285</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.285"></a>
+<span class="sourceLineNo">286</span>    Configuration testConf = HBaseConfiguration.create();<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    source.init(testConf, null, mockManager, null, mockPeer, null,<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      "testPeer", null, p -&gt; OptionalLong.empty(), mock(MetricsSource.class));<a name="line.288"></a>
+<span class="sourceLineNo">289</span>    ReplicationSourceWALReader reader = new ReplicationSourceWALReader(null,<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      conf, null, 0, null, source);<a name="line.290"></a>
+<span class="sourceLineNo">291</span>    ReplicationSourceShipper shipper =<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      new ReplicationSourceShipper(conf, null, null, source);<a name="line.292"></a>
+<span class="sourceLineNo">293</span>    shipper.entryReader = reader;<a name="line.293"></a>
+<span class="sourceLineNo">294</span>    source.workerThreads.put("testPeer", shipper);<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    WALEntryBatch batch = new WALEntryBatch(10, logDir);<a name="line.295"></a>
+<span class="sourceLineNo">296</span>    WAL.Entry mockEntry = mock(WAL.Entry.class);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    WALEdit mockEdit = mock(WALEdit.class);<a name="line.297"></a>
+<span class="sourceLineNo">298</span>    WALKeyImpl mockKey = mock(WALKeyImpl.class);<a name="line.298"></a>
+<span class="sourceLineNo">299</span>    when(mockEntry.getEdit()).thenReturn(mockEdit);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>    when(mockEdit.isEmpty()).thenReturn(false);<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    when(mockEntry.getKey()).thenReturn(mockKey);<a name="line.301"></a>
+<span class="sourceLineNo">302</span>    when(mockKey.estimatedSerializedSizeOf()).thenReturn(1000L);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>    when(mockEdit.heapSize()).thenReturn(10000L);<a name="line.303"></a>
+<span class="sourceLineNo">304</span>    when(mockEdit.size()).thenReturn(0);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>    ArrayList&lt;Cell&gt; cells = new ArrayList&lt;&gt;();<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    KeyValue kv = new KeyValue(Bytes.toBytes("0001"), Bytes.toBytes("f"),<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      Bytes.toBytes("1"), Bytes.toBytes("v1"));<a name="line.307"></a>
+<span class="sourceLineNo">308</span>    cells.add(kv);<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    when(mockEdit.getCells()).thenReturn(cells);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    reader.addEntryToBatch(batch, mockEntry);<a name="line.310"></a>
+<span class="sourceLineNo">311</span>    reader.entryBatchQueue.put(batch);<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    source.terminate("test");<a name="line.312"></a>
+<span class="sourceLineNo">313</span>    assertEquals(0, source.getSourceManager().getTotalBufferUsed().get());<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>  /**<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * Tests that recovered queues are preserved on a regionserver shutdown.<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   * See HBASE-18192<a name="line.318"></a>
+<span class="sourceLineNo">319</span>   */<a name="line.319"></a>
+<span class="sourceLineNo">320</span>  @Test<a name="line.320"></a>
+<span class="sourceLineNo">321</span>  public void testServerShutdownRecoveredQueue() throws Exception {<a name="line.321"></a>
+<span class="sourceLineNo">322</span>    try {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>      // Ensure single-threaded WAL<a name="line.323"></a>
+<span class="sourceLineNo">324</span>      conf.set("hbase.wal.provider", "defaultProvider");<a name="line.324"></a>
+<span class="sourceLineNo">325</span>      conf.setInt("replication.sleep.before.failover", 2000);<a name="line.325"></a>
+<span class="sourceLineNo">326</span>      // Introduces a delay in regionserver shutdown to give the race condition a chance to kick in.<a name="line.326"></a>
+<span class="sourceLineNo">327</span>      conf.set(HConstants.REGION_SERVER_IMPL, ShutdownDelayRegionServer.class.getName());<a name="line.327"></a>
+<span class="sourceLineNo">328</span>      MiniHBaseCluster cluster = TEST_UTIL.startMiniCluster(2);<a name="line.328"></a>
+<span class="sourceLineNo">329</span>      TEST_UTIL_PEER.startMiniCluster(1);<a name="line.329"></a>
+<span class="sourceLineNo">330</span><a name="line.330"></a>
+<span class="sourceLineNo">331</span>      HRegionServer serverA = cluster.getRegionServer(0);<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      final ReplicationSourceManager managerA =<a name="line.332"></a>
+<span class="sourceLineNo">333</span>          serverA.getReplicationSourceService().getReplicationManager();<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      HRegionServer serverB = cluster.getRegionServer(1);<a name="line.334"></a>
+<span class="sourceLineNo">335</span>      final ReplicationSourceManager managerB =<a name="line.335"></a>
+<span class="sourceLineNo">336</span>          serverB.getReplicationSourceService().getReplicationManager();<a name="line.336"></a>
+<span class="sourceLineNo">337</span>      final Admin admin = TEST_UTIL.getAdmin();<a name="line.337"></a>
+<span class="sourceLineNo">338</span><a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final String peerId = "TestPeer";<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      admin.addReplicationPeer(peerId,<a name="line.340"></a>
+<span class="sourceLineNo">341</span>        ReplicationPeerConfig.newBuilder().setClusterKey(TEST_UTIL_PEER.getClusterKey()).build());<a name="line.341"></a>
+<span class="sourceLineNo">342</span>      // Wait for replication sources to come up<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.343"></a>
+<span class="sourceLineNo">344</span>        @Override public boolean evaluate() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>          return !(managerA.getSources().isEmpty() || managerB.getSources().isEmpty());<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>      // Disabling peer makes sure there is at least one log to claim when the server dies<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      // The recovered queue will also stay there until the peer is disabled even if the<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      // WALs it contains have no data.<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      admin.disableReplicationPeer(peerId);<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>    protected void stopServiceThreads() {<a name="line.354"></a>
-<span class="sourceLineNo">355</span>      // Add a delay before service threads are shutdown.<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      // This will keep the zookeeper connection alive for the duration of the delay.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>      LOG.info("Adding a delay to the regionserver shutdown");<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      try {<a name="line.358"></a>
-<span class="sourceLineNo">359</span>        Thread.sleep(2000);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      } catch (InterruptedException ex) {<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        LOG.error("Interrupted while sleeping");<a name="line.361"></a>
-<span class="sourceLineNo">362</span>      }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      super.stopServiceThreads();<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>  /**<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * Deadend Endpoint. Does nothing.<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   */<a name="line.369"></a>
-<span class="sourceLineNo">370</span>  public static class DoNothingReplicationEndpoint extends HBaseInterClusterReplicationEndpoint {<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    private final UUID uuid = UUID.randomUUID();<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    @Override public void init(Context context) throws IOException {<a name="line.373"></a>
-<span class="sourceLineNo">374</span>      this.ctx = context;<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 public WALEntryFilter getWALEntryfilter() {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      return null;<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 public synchronized UUID getPeerUUID() {<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      return this.uuid;<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>    @Override<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    protected void doStart() {<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      notifyStarted();<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>    @Override<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    protected void doStop() {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      notifyStopped();<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>    @Override public boolean canReplicateToSameCluster() {<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      return true;<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><a name="line.399"></a>
-<span class="sourceLineNo">400</span>  /**<a name="line.400"></a>
-<span class="sourceLineNo">401</span>   * Deadend Endpoint. Does nothing.<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   */<a name="line.402"></a>
-<span class="sourceLineNo">403</span>  public static class FaultyReplicationEndpoint extends DoNothingReplicationEndpoint {<a name="line.403"></a>
-<span class="sourceLineNo">404</span><a name="line.404"></a>
-<span class="sourceLineNo">405</span>    static int count = 0;<a name="line.405"></a>
-<span class="sourceLineNo">406</span><a name="line.406"></a>
-<span class="sourceLineNo">407</span>    @Override<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public synchronized UUID getPeerUUID() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      if(count==0) {<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        count++;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>        throw new RuntimeException();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } else {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        return super.getPeerUUID();<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">353</span>      // Stopping serverA<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      // It's queues should be claimed by the only other alive server i.e. serverB<a name="line.354"></a>
+<span class="sourceLineNo">355</span>      cluster.stopRegionServer(serverA.getServerName());<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>        @Override public boolean evaluate() throws Exception {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>          return managerB.getOldSources().size() == 1;<a name="line.358"></a>
+<span class="sourceLineNo">359</span>        }<a name="line.359"></a>
+<span class="sourceLineNo">360</span>      });<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>      final HRegionServer serverC = cluster.startRegionServer().getRegionServer();<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      serverC.waitForServerOnline();<a name="line.363"></a>
+<span class="sourceLineNo">364</span>      Waiter.waitFor(conf, 20000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>        @Override public boolean evaluate() throws Exception {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>          return serverC.getReplicationSourceService() != null;<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>      final ReplicationSourceManager managerC =<a name="line.369"></a>
+<span class="sourceLineNo">370</span>          ((Replication) serverC.getReplicationSourceService()).getReplicationManager();<a name="line.370"></a>
+<span class="sourceLineNo">371</span>      // Sanity check<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      assertEquals(0, managerC.getOldSources().size());<a name="line.372"></a>
+<span class="sourceLineNo">373</span><a name="line.373"></a>
+<span class="sourceLineNo">374</span>      // Stopping serverB<a name="line.374"></a>
+<span class="sourceLineNo">375</span>      // Now serverC should have two recovered queues:<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      // 1. The serverB's normal queue<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      // 2. serverA's recovered queue on serverB<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      cluster.stopRegionServer(serverB.getServerName());<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      Waiter.waitFor(conf, 20000,<a name="line.379"></a>
+<span class="sourceLineNo">380</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 2);<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      admin.enableReplicationPeer(peerId);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      Waiter.waitFor(conf, 20000,<a name="line.382"></a>
+<span class="sourceLineNo">383</span>        (Waiter.Predicate&lt;Exception&gt;) () -&gt; managerC.getOldSources().size() == 0);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    } finally {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      conf.set(HConstants.REGION_SERVER_IMPL, HRegionServer.class.getName());<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>  /**<a name="line.389"></a>
+<span class="sourceLineNo">390</span>   * Regionserver implementation that adds a delay on the graceful shutdown.<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   */<a name="line.391"></a>
+<span class="sourceLineNo">392</span>  public static class ShutdownDelayRegionServer extends HRegionServer {<a name="line.392"></a>
+<span class="sourceLineNo">393</span>    public ShutdownDelayRegionServer(Configuration conf) throws IOException {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      super(conf);<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>    @Override<a name="line.397"></a>
+<span class="sourceLineNo">398</span>    protected void stopServiceThreads() {<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      // Add a delay before service threads are shutdown.<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      // This will keep the zookeeper connection alive for the duration of the delay.<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      LOG.info("Adding a delay to the regionserver shutdown");<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      try {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        Thread.sleep(2000);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      } catch (InterruptedException ex) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        LOG.error("Interrupted while sleeping");<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      }<a name="line.406"></a>
+<span class="sourceLineNo">407</span>      super.stopServiceThreads();<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>   * Deadend Endpoint. Does nothing.<a name="line.412"></a>
+<span class="sourceLineNo">413</span>   */<a name="line.413"></a>
+<span class="sourceLineNo">414</span>  public static class DoNothingReplicationEndpoint extends HBaseInterClusterReplicationEndpoint {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>    private final UUID uuid = UUID.randomUUID();<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><a name="line.418"></a>
-<span class="sourceLineNo">419</span>  /**<a name="line.419"></a>
-<span class="sourceLineNo">420</span>   * Test HBASE-20497<a name="line.420"></a>
-<span class="sourceLineNo">421</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.421"></a>
-<span class="sourceLineNo">422</span>   */<a name="line.422"></a>
-<span class="sourceLineNo">423</span>  @Test<a name="line.423"></a>
-<span class="sourceLineNo">424</span>  public void testRecoveredReplicationSourceShipperGetPosition() throws Exception {<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    String walGroupId = "fake-wal-group-id";<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    ServerName serverName = ServerName.valueOf("www.example.com", 12006, 1524679704418L);<a name="line.426"></a>
-<span class="sourceLineNo">427</span>    ServerName deadServer = ServerName.valueOf("www.deadServer.com", 12006, 1524679704419L);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    PriorityBlockingQueue&lt;Path&gt; queue = new PriorityBlockingQueue&lt;&gt;();<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    queue.put(new Path("/www/html/test"));<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    RecoveredReplicationSource source = Mockito.mock(RecoveredReplicationSource.class);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>    Server server = Mockito.mock(Server.class);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>    Mockito.when(server.getServerName()).thenReturn(serverName);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    Mockito.when(source.getServer()).thenReturn(server);<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    Mockito.when(source.getServerWALsBelongTo()).thenReturn(deadServer);<a name="line.434"></a>
-<span class="sourceLineNo">435</span>    ReplicationQueueStorage storage = Mockito.mock(ReplicationQueueStorage.class);<a name="line.435"></a>
-<span class="sourceLineNo">436</span>    Mockito.when(storage.getWALPosition(Mockito.eq(serverName), Mockito.any(), Mockito.any()))<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      .thenReturn(1001L);<a name="line.437"></a>
-<span class="sourceLineNo">438</span>    Mockito.when(storage.getWALPosition(Mockito.eq(deadServer), Mockito.any(), Mockito.any()))<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      .thenReturn(-1L);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.440"></a>
-<span class="sourceLineNo">441</span>    conf.setInt("replication.source.maxretriesmultiplier", -1);<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    RecoveredReplicationSourceShipper shipper =<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      new RecoveredReplicationSourceShipper(conf, walGroupId, queue, source, storage);<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    assertEquals(1001L, shipper.getStartPosition());<a name="line.444"></a>
-<span class="sourceLineNo">445</span>  }<a name="line.445"></a>
-<span class="sourceLineNo">446</span><a name="line.446"></a>
-<span class="sourceLineNo">447</span>  /**<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * during initialization and &lt;b&gt;eplication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   */<a name="line.450"></a>
-<span class="sourceLineNo">451</span>  @Test<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  public void testAbortFalseOnError() throws IOException {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    ReplicationSource rs = new ReplicationSource();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    conf.setBoolean("replication.source.regionserver.abort", false);<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.459"></a>
-<span class="sourceLineNo">460</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.460"></a>
-<span class="sourceLineNo">461</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    String queueId = "qid";<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    RegionServerServices rss =<a name="line.467"></a>
-<span class="sourceLineNo">468</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    try {<a name="line.471"></a>
-<span class="sourceLineNo">472</span>      rs.startup();<a name="line.472"></a>
-<span class="sourceLineNo">473</span>      assertTrue(rs.isSourceActive());<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.475"></a>
-<span class="sourceLineNo">476</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      rs.enqueueLog(new Path("a.1"));<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.478"></a>
-<span class="sourceLineNo">479</span>    } finally {<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      rs.terminate("Done");<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      rss.stop("Done");<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    }<a name="line.482"></a>
-<span class="sourceLineNo">483</span>  }<a name="line.483"></a>
-<span class="sourceLineNo">484</span><a name="line.484"></a>
-<span class="sourceLineNo">485</span>  /**<a name="line.485"></a>
-<span class="sourceLineNo">486</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.486"></a>
-<span class="sourceLineNo">487</span>   * during initialization and &lt;b&gt;replication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.487"></a>
-<span class="sourceLineNo">488</span>   */<a name="line.488"></a>
-<span class="sourceLineNo">489</span>  @Test<a name="line.489"></a>
-<span class="sourceLineNo">490</span>  public void testAbortTrueOnError() throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    ReplicationSource rs = new ReplicationSource();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.494"></a>
-<span class="sourceLineNo">495</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.495"></a>
-<span class="sourceLineNo">496</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.496"></a>
-<span class="sourceLineNo">497</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.498"></a>
-<span class="sourceLineNo">499</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.500"></a>
-<span class="sourceLineNo">501</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    String queueId = "qid";<a name="line.503"></a>
-<span class="sourceLineNo">504</span>    RegionServerServices rss =<a name="line.504"></a>
-<span class="sourceLineNo">505</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.505"></a>
-<span class="sourceLineNo">506</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.507"></a>
-<span class="sourceLineNo">508</span>    try {<a name="line.508"></a>
-<span class="sourceLineNo">509</span>      rs.startup();<a name="line.509"></a>
-<span class="sourceLineNo">510</span>      Waiter.waitFor(conf, 1000, () -&gt; FaultyReplicationEndpoint.count &gt; 0);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      assertFalse(rs.isSourceActive());<a name="line.511"></a>
-<span class="sourceLineNo">512</span>      assertTrue(rss.isAborted());<a name="line.512"></a>
-<span class="sourceLineNo">513</span>    } finally {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>      rs.terminate("Done");<a name="line.514"></a>
-<span class="sourceLineNo">515</span>      rss.stop("Done");<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    }<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span>}<a name="line.518"></a>
-<span class="sourceLineNo">519</span><a name="line.519"></a>
+<span class="sourceLineNo">417</span>    @Override public void init(Context context) throws IOException {<a name="line.417"></a>
+<span class="sourceLineNo">418</span>      this.ctx = context;<a name="line.418"></a>
+<span class="sourceLineNo">419</span>    }<a name="line.419"></a>
+<span class="sourceLineNo">420</span><a name="line.420"></a>
+<span class="sourceLineNo">421</span>    @Override public WALEntryFilter getWALEntryfilter() {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      return null;<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>    @Override public synchronized UUID getPeerUUID() {<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      return this.uuid;<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>    @Override<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    protected void doStart() {<a name="line.430"></a>
+<span class="sourceLineNo">431</span>      notifyStarted();<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>    protected void doStop() {<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      notifyStopped();<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 public boolean canReplicateToSameCluster() {<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      return true;<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>  /**<a name="line.444"></a>
+<span class="sourceLineNo">445</span>   * Deadend Endpoint. Does nothing.<a name="line.445"></a>
+<span class="sourceLineNo">446</span>   */<a name="line.446"></a>
+<span class="sourceLineNo">447</span>  public static class FaultyReplicationEndpoint extends DoNothingReplicationEndpoint {<a name="line.447"></a>
+<span class="sourceLineNo">448</span><a name="line.448"></a>
+<span class="sourceLineNo">449</span>    static int count = 0;<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 synchronized UUID getPeerUUID() {<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      if(count==0) {<a name="line.453"></a>
+<span class="sourceLineNo">454</span>        count++;<a name="line.454"></a>
+<span class="sourceLineNo">455</span>        throw new RuntimeException();<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      } else {<a name="line.456"></a>
+<span class="sourceLineNo">457</span>        return super.getPeerUUID();<a name="line.457"></a>
+<span class="sourceLineNo">458</span>      }<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
+<span class="sourceLineNo">460</span><a name="line.460"></a>
+<span class="sourceLineNo">461</span>  }<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>   * Test HBASE-20497<a name="line.464"></a>
+<span class="sourceLineNo">465</span>   * Moved here from TestReplicationSource because doesn't need cluster.<a name="line.465"></a>
+<span class="sourceLineNo">466</span>   */<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  @Test<a name="line.467"></a>
+<span class="sourceLineNo">468</span>  public void testRecoveredReplicationSourceShipperGetPosition() throws Exception {<a name="line.468"></a>
+<span class="sourceLineNo">469</span>    String walGroupId = "fake-wal-group-id";<a name="line.469"></a>
+<span class="sourceLineNo">470</span>    ServerName serverName = ServerName.valueOf("www.example.com", 12006, 1524679704418L);<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    ServerName deadServer = ServerName.valueOf("www.deadServer.com", 12006, 1524679704419L);<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    PriorityBlockingQueue&lt;Path&gt; queue = new PriorityBlockingQueue&lt;&gt;();<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    queue.put(new Path("/www/html/test"));<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    RecoveredReplicationSource source = mock(RecoveredReplicationSource.class);<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    Server server = mock(Server.class);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    Mockito.when(server.getServerName()).thenReturn(serverName);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    Mockito.when(source.getServer()).thenReturn(server);<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    Mockito.when(source.getServerWALsBelongTo()).thenReturn(deadServer);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    ReplicationQueueStorage storage = mock(ReplicationQueueStorage.class);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    Mockito.when(storage.getWALPosition(Mockito.eq(serverName), Mockito.any(), Mockito.any()))<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      .thenReturn(1001L);<a name="line.481"></a>
+<span class="sourceLineNo">482</span>    Mockito.when(storage.getWALPosition(Mockito.eq(deadServer), Mockito.any(), Mockito.any()))<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      .thenReturn(-1L);<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    conf.setInt("replication.source.maxretriesmultiplier", -1);<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    RecoveredReplicationSourceShipper shipper =<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      new RecoveredReplicationSourceShipper(conf, walGroupId, queue, source, storage);<a name="line.487"></a>
+<span class="sourceLineNo">488</span>    assertEquals(1001L, shipper.getStartPosition());<a name="line.488"></a>
+<span class="sourceLineNo">489</span>  }<a name="line.489"></a>
+<span class="sourceLineNo">490</span><a name="line.490"></a>
+<span class="sourceLineNo">491</span>  /**<a name="line.491"></a>
+<span class="sourceLineNo">492</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.492"></a>
+<span class="sourceLineNo">493</span>   * during initialization and &lt;b&gt;eplication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.493"></a>
+<span class="sourceLineNo">494</span>   */<a name="line.494"></a>
+<span class="sourceLineNo">495</span>  @Test<a name="line.495"></a>
+<span class="sourceLineNo">496</span>  public void testAbortFalseOnError() throws IOException {<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    ReplicationSource rs = new ReplicationSource();<a name="line.497"></a>
+<span class="sourceLineNo">498</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.498"></a>
+<span class="sourceLineNo">499</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>    conf.setBoolean("replication.source.regionserver.abort", false);<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.507"></a>
+<span class="sourceLineNo">508</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.508"></a>
+<span class="sourceLineNo">509</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    String queueId = "qid";<a name="line.510"></a>
+<span class="sourceLineNo">511</span>    RegionServerServices rss =<a name="line.511"></a>
+<span class="sourceLineNo">512</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.513"></a>
+<span class="sourceLineNo">514</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    try {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      rs.startup();<a name="line.516"></a>
+<span class="sourceLineNo">517</span>      assertTrue(rs.isSourceActive());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      rs.enqueueLog(new Path("a.1" + META_WAL_PROVIDER_ID));<a name="line.519"></a>
+<span class="sourceLineNo">520</span>      assertEquals(0, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      rs.enqueueLog(new Path("a.1"));<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      assertEquals(1, rs.getSourceMetrics().getSizeOfLogQueue());<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    } finally {<a name="line.523"></a>
+<span class="sourceLineNo">524</span>      rs.terminate("Done");<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      rss.stop("Done");<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    }<a name="line.526"></a>
+<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
+<span class="sourceLineNo">528</span><a name="line.528"></a>
+<span class="sourceLineNo">529</span>  /**<a name="line.529"></a>
+<span class="sourceLineNo">530</span>   * Test ReplicationSource retries startup once an uncaught exception happens<a name="line.530"></a>
+<span class="sourceLineNo">531</span>   * during initialization and &lt;b&gt;replication.source.regionserver.abort&lt;/b&gt; is set to false.<a name="line.531"></a>
+<span class="sourceLineNo">532</span>   */<a name="line.532"></a>
+<span class="sourceLineNo">533</span>  @Test<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public void testAbortTrueOnError() throws IOException {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    ReplicationSource rs = new ReplicationSource();<a name="line.535"></a>
+<span class="sourceLineNo">536</span>    Configuration conf = new Configuration(TEST_UTIL.getConfiguration());<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    conf.setInt("replication.source.maxretriesmultiplier", 1);<a name="line.537"></a>
+<span class="sourceLineNo">538</span>    ReplicationPeer mockPeer = Mockito.mock(ReplicationPeer.class);<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    Mockito.when(mockPeer.getConfiguration()).thenReturn(conf);<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    Mockito.when(mockPeer.getPeerBandwidth()).thenReturn(0L);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>    ReplicationPeerConfig peerConfig = Mockito.mock(ReplicationPeerConfig.class);<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    Mockito.when(peerConfig.getReplicationEndpointImpl()).<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      thenReturn(FaultyReplicationEndpoint.class.getName());<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    Mockito.when(mockPeer.getPeerConfig()).thenReturn(peerConfig);<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    ReplicationSourceManager manager = Mockito.mock(ReplicationSourceManager.class);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>    Mockito.when(manager.getTotalBufferUsed()).thenReturn(new AtomicLong());<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    String queueId = "qid";<a name="line.547"></a>
+<span class="sourceLineNo">548</span>    RegionServerServices rss =<a name="line.548"></a>
+<span class="sourceLineNo">549</span>      TEST_UTIL.createMockRegionServerService(ServerName.parseServerName("a.b.c,1,1"));<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    rs.init(conf, null, manager, null, mockPeer, rss, queueId, null,<a name="line.550"></a>
+<span class="sourceLineNo">551</span>      p -&gt; OptionalLong.empty(), new MetricsSource(queueId));<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    try {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      rs.startup();<a name="line.553"></a>
+<span class="sourceLineNo">554</span>      Waiter.waitFor(conf, 1000, () -&gt; FaultyReplicationEndpoint.count &gt; 0);<a name="line.554"></a>
+<span class="sourceLineNo">555</span>      assertFalse(rs.isSourceActive());<a name="line.555"></a>
+<span class="sourceLineNo">556</span>      assertTrue(rss.isAborted());<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    } finally {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      rs.terminate("Done");<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      rss.stop("Done");<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    }<a name="line.560"></a>
+<span class="sourceLineNo">561</span>  }<a name="line.561"></a>
+<span class="sourceLineNo">562</span>}<a name="line.562"></a>
+<span class="sourceLineNo">563</span><a name="line.563"></a>