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

(hbase-site) branch asf-site updated: Published site at b21ba71f73881336345fd5dd7d647910b3058e05.

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new ca0df2564bb Published site at b21ba71f73881336345fd5dd7d647910b3058e05.
ca0df2564bb is described below

commit ca0df2564bbed73b4cc6ea120ff20da5c3ea2864
Author: jenkins <bu...@apache.org>
AuthorDate: Mon May 19 14:51:05 2025 +0000

    Published site at b21ba71f73881336345fd5dd7d647910b3058e05.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 apidocs/index-all.html                             |   32 +-
 apidocs/member-search-index.js                     |    2 +-
 .../hadoop/hbase/ipc/class-use/QosPriority.html    |   20 +-
 .../hadoop/hbase/io/hfile/HFilePreadReader.html    |  209 +-
 .../MasterAnnotationReadingPriorityFunction.html   |    4 +-
 .../hadoop/hbase/master/MasterRpcServices.html     | 6030 ++++++++++----------
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          | 4701 +++++++--------
 checkstyle.rss                                     |  698 +--
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 .../hadoop/hbase/io/hfile/HFilePreadReader.html    |    6 +-
 .../hadoop/hbase/ipc/class-use/QosPriority.html    |   20 +-
 .../hadoop/hbase/master/MasterRpcServices.html     |  324 +-
 .../hadoop/hbase/io/hfile/HFilePreadReader.html    |  209 +-
 .../MasterAnnotationReadingPriorityFunction.html   |    4 +-
 .../MasterRpcServices.BalanceSwitchMode.html       | 6030 ++++++++++----------
 .../hadoop/hbase/master/MasterRpcServices.html     | 6030 ++++++++++----------
 downloads.html                                     |    2 +-
 export_control.html                                |    2 +-
 index.html                                         |    2 +-
 issue-management.html                              |    2 +-
 licenses.html                                      |    2 +-
 mailing-lists.html                                 |    2 +-
 metrics.html                                       |    2 +-
 old_news.html                                      |    2 +-
 plugin-management.html                             |    2 +-
 plugins.html                                       |    2 +-
 poweredbyhbase.html                                |    2 +-
 project-info.html                                  |    2 +-
 project-reports.html                               |    2 +-
 pseudo-distributed.html                            |    2 +-
 replication.html                                   |    2 +-
 resources.html                                     |    2 +-
 scm.html                                           |    2 +-
 sponsors.html                                      |    2 +-
 summary.html                                       |    2 +-
 supportingprojects.html                            |    2 +-
 team.html                                          |    2 +-
 testapidocs/index-all.html                         |   94 +-
 testapidocs/member-search-index.js                 |    2 +-
 .../hadoop/hbase/master/TestMasterQosFunction.html |  154 +-
 testdevapidocs/index-all.html                      |  158 +-
 testdevapidocs/member-search-index.js              |    2 +-
 .../hfile/bucket/TestPrefetchWithBucketCache.html  |   18 +-
 .../hadoop/hbase/master/TestMasterQosFunction.html |   27 +-
 .../hfile/bucket/TestPrefetchWithBucketCache.html  |  255 +-
 .../hadoop/hbase/master/TestMasterQosFunction.html |  154 +-
 54 files changed, 12649 insertions(+), 12596 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index 8bb0d6fb9ed..df1f7b0e169 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -469,7 +469,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-05-17
+        Last Published: 2025-05-19
       </div>
         </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 106d821b702..c22d510a494 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 2.0.6, based on Prawn 2.4.0)
 /Producer (Apache HBase Team)
-/ModDate (D:20250517142959+00'00')
-/CreationDate (D:20250517144517+00'00')
+/ModDate (D:20250519143157+00'00')
+/CreationDate (D:20250519144724+00'00')
 >>
 endobj
 2 0 obj
diff --git a/apidocs/index-all.html b/apidocs/index-all.html
index 4dfd9487414..b8fb027d7cb 100644
--- a/apidocs/index-all.html
+++ b/apidocs/index-all.html
@@ -1488,9 +1488,9 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>affixShutdownHook(Thread, int) - Static method in class org.apache.hadoop.hbase.util.ShutdownHookManager</dt>
 <dd>&nbsp;</dd>
-<dt>afterDecodingKeyValue(DataInputStream, ByteBuffer, HFileBlockDefaultDecodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>afterDecodingKeyValue(DataInputStream, ByteBuffer, HFileBlockDefaultDecodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
-<dt>afterEncodingKeyValue(ExtendedCell, DataOutputStream, HFileBlockDefaultEncodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>afterEncodingKeyValue(ExtendedCell, DataOutputStream, HFileBlockDefaultEncodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>
 <div class="block">Returns unencoded size added</div>
 </dd>
@@ -8599,11 +8599,11 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Compares the family and qualifier part of the cell</div>
 </dd>
-<dt>compareCommonFamilyPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>compareCommonFamilyPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
-<dt>compareCommonQualifierPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>compareCommonQualifierPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
-<dt>compareCommonRowPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>compareCommonRowPrefix(Cell, Cell, int) - Static method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>
 <div class="block">common prefixes</div>
 </dd>
@@ -9292,7 +9292,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.StoreFileReader</dt>
 <dd>&nbsp;</dd>
-<dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
+<dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL</dt>
 <dd>
@@ -11966,7 +11966,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Create a new Scan with a cursor.</div>
 </dd>
-<dt>createScanner(List&lt;KeyValueScanner&gt;, FlushLifeCycleTracker) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
+<dt>createScanner(List&lt;KeyValueScanner&gt;, FlushLifeCycleTracker) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
 <dd>
 <div class="block">Creates the scanner for flushing snapshot.</div>
 </dd>
@@ -12502,7 +12502,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Create a writer for writing new store files.</div>
 </dd>
-<dt>createWriter(MemStoreSnapshot, boolean, Consumer&lt;Path&gt;) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
+<dt>createWriter(MemStoreSnapshot, boolean, Consumer&lt;Path&gt;) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>createWriterInstance(FileSystem, Path) - Method in class org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL</dt>
 <dd>&nbsp;</dd>
@@ -13094,7 +13094,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Decode an <code>int8</code> value.</div>
 </dd>
-<dt>decodeKeyValues(DataInputStream, HFileBlockDecodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>decodeKeyValues(DataInputStream, HFileBlockDecodingContext) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
 <dt>decodeKeyValues(DataInputStream, HFileBlockDecodingContext) - Method in interface org.apache.hadoop.hbase.io.encoding.DataBlockEncoder</dt>
 <dd>
@@ -15950,7 +15950,7 @@ loadScripts(document, 'script');</script>
 <dd>
 <div class="block">Separator used to demarcate the encodedName in a region name in the new format.</div>
 </dd>
-<dt>encode(ExtendedCell, HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>encode(ExtendedCell, HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
 <dt>encode(ExtendedCell, HFileBlockEncodingContext, DataOutputStream) - Method in interface org.apache.hadoop.hbase.io.encoding.DataBlockEncoder</dt>
 <dd>
@@ -16364,7 +16364,7 @@ loadScripts(document, 'script');</script>
 </dd>
 <dt>END_TIME_KEY - Static variable in class org.apache.hadoop.hbase.mapreduce.WALInputFormat</dt>
 <dd>&nbsp;</dd>
-<dt>endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[]) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[]) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
 <dt>endBlockEncoding(HFileBlockEncodingContext, DataOutputStream, byte[]) - Method in interface org.apache.hadoop.hbase.io.encoding.DataBlockEncoder</dt>
 <dd>
@@ -16475,7 +16475,7 @@ loadScripts(document, 'script');</script>
 <div class="deprecation-block"><span class="deprecated-label">Deprecated.</span></div>
 <div class="block">Make sure that at least the specified number of region servers are running</div>
 </dd>
-<dt>ensureSpace(ByteBuffer, int) - Static method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>ensureSpace(ByteBuffer, int) - Static method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>
 <div class="block">Asserts that there is at least the given amount of unfilled space remaining in the given
  buffer.</div>
@@ -18547,7 +18547,7 @@ loadScripts(document, 'script');</script>
 <dd>&nbsp;</dd>
 <dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher</dt>
 <dd>&nbsp;</dd>
-<dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
+<dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>findArchivedLog(Path, Configuration) - Static method in class org.apache.hadoop.hbase.wal.AbstractFSWALProvider</dt>
 <dd>
@@ -52085,7 +52085,7 @@ service.</div>
 <dd>
 <div class="block">Performs compaction on a column family with the mob flag enabled.</div>
 </dd>
-<dt>performFlush(InternalScanner, CellSink, ThroughputController) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
+<dt>performFlush(InternalScanner, CellSink, ThroughputController) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
 <dd>
 <div class="block">Performs memstore flush, writing data from scanner into sink.</div>
 </dd>
@@ -67484,7 +67484,7 @@ service.</div>
 &nbsp;</dd>
 <dt>START_TIME_KEY - Static variable in class org.apache.hadoop.hbase.mapreduce.WALInputFormat</dt>
 <dd>&nbsp;</dd>
-<dt>startBlockEncoding(HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.PrefixKeyDeltaEncoder</dt>
+<dt>startBlockEncoding(HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.DiffKeyDeltaEncoder</dt>
 <dd>&nbsp;</dd>
 <dt>startBlockEncoding(HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.CopyKeyDataBlockEncoder</dt>
 <dd>&nbsp;</dd>
@@ -68372,7 +68372,7 @@ service.</div>
 </dd>
 <dt>store - Variable in class org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider</dt>
 <dd>&nbsp;</dd>
-<dt>store - Variable in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
+<dt>store - Variable in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
 <dd>&nbsp;</dd>
 <dt>store - Variable in class org.apache.hadoop.hbase.regionserver.StoreScanner</dt>
 <dd>&nbsp;</dd>
diff --git a/apidocs/member-search-index.js b/apidocs/member-search-index.js
index 0ee6414efbf..793f5474153 100644
--- a/apidocs/member-search-index.js
+++ b/apidocs/member-search-index.js
@@ -1 +1 @@
-memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
+memberSearchIndex = [{"p":"org.apache.hadoop.hbase.filter","c":"ParseConstants","l":"A"},{"p":"org.apache.hadoop.hbase.master","c":"RegionState.State","l":"ABNORMALLY_CLOSED"},{"p":"org.apache.hadoop.hbase.coprocessor","c":"CoprocessorHost","l":"ABORT_ON_ERROR_KEY"},{"p":"org.apache.hadoop.hdfs","c":"DummyDFSOutputStream","l":"abort()"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abort(String)","u":"abort(java.lang.String)"},{"p":"org.apache.hadoop.hbase","c":"Abortable","l":"abo [...]
\ No newline at end of file
diff --git a/apidocs/org/apache/hadoop/hbase/ipc/class-use/QosPriority.html b/apidocs/org/apache/hadoop/hbase/ipc/class-use/QosPriority.html
index 0cf666f66c0..c7a61daa4d1 100644
--- a/apidocs/org/apache/hadoop/hbase/ipc/class-use/QosPriority.html
+++ b/apidocs/org/apache/hadoop/hbase/ipc/class-use/QosPriority.html
@@ -95,25 +95,9 @@ loadScripts(document, 'script');</script>
 <div class="table-header col-first">Modifier and Type</div>
 <div class="table-header col-second">Method</div>
 <div class="table-header col-last">Description</div>
-<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdResponse</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">MasterRpcServices.</span><code>getLastFlushedSequenceId<wbr>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdRequest&nbsp;request)</code></div>
-<div class="col-last even-row-color">&nbsp;</div>
-<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">MasterRpcServices.</span><code>getRegionInfo<wbr>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
+<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoResponse</code></div>
+<div class="col-second even-row-color"><span class="type-name-label">MasterRpcServices.</span><code>getRegionInfo<wbr>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
  org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest&nbsp;request)</code></div>
-<div class="col-last odd-row-color">&nbsp;</div>
-<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportResponse</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">MasterRpcServices.</span><code>regionServerReport<wbr>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest&nbsp;request)</code></div>
-<div class="col-last even-row-color">&nbsp;</div>
-<div class="col-first odd-row-color"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupResponse</code></div>
-<div class="col-second odd-row-color"><span class="type-name-label">MasterRpcServices.</span><code>regionServerStartup<wbr>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest&nbsp;request)</code></div>
-<div class="col-last odd-row-color">&nbsp;</div>
-<div class="col-first even-row-color"><code>org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorResponse</code></div>
-<div class="col-second even-row-color"><span class="type-name-label">MasterRpcServices.</span><code>reportRSFatalError<wbr>(org.apache.hbase.thirdparty.com.google.protobuf.RpcController&nbsp;controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorRequest&nbsp;request)</code></div>
 <div class="col-last even-row-color">&nbsp;</div>
 </div>
 </section>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFilePreadReader.html b/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFilePreadReader.html
index fe069421377..431836d06f5 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFilePreadReader.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/io/hfile/HFilePreadReader.html
@@ -110,109 +110,112 @@
 <span class="source-line-no">097</span><span id="line-97">                    + "Skipping prefetch, the block is already cached.", size, cacheKey);</span>
 <span class="source-line-no">098</span><span id="line-98">                  blockCount++;</span>
 <span class="source-line-no">099</span><span id="line-99">                  dataBlockCount++;</span>
-<span class="source-line-no">100</span><span id="line-100">                  continue;</span>
-<span class="source-line-no">101</span><span id="line-101">                } else {</span>
-<span class="source-line-no">102</span><span id="line-102">                  LOG.debug("Found block for cache key {}, but couldn't get its size. "</span>
-<span class="source-line-no">103</span><span id="line-103">                    + "Maybe the cache implementation doesn't support it? "</span>
-<span class="source-line-no">104</span><span id="line-104">                    + "We'll need to read the block from cache or file system. ", cacheKey);</span>
-<span class="source-line-no">105</span><span id="line-105">                }</span>
-<span class="source-line-no">106</span><span id="line-106">              } else {</span>
-<span class="source-line-no">107</span><span id="line-107">                LOG.debug("No entry in the backing map for cache key {}. ", cacheKey);</span>
-<span class="source-line-no">108</span><span id="line-108">              }</span>
-<span class="source-line-no">109</span><span id="line-109">              // Perhaps we got our block from cache? Unlikely as this may be, if it happens, then</span>
-<span class="source-line-no">110</span><span id="line-110">              // the internal-to-hfileblock thread local which holds the overread that gets the</span>
-<span class="source-line-no">111</span><span id="line-111">              // next header, will not have happened...so, pass in the onDiskSize gotten from the</span>
-<span class="source-line-no">112</span><span id="line-112">              // cached block. This 'optimization' triggers extremely rarely I'd say.</span>
-<span class="source-line-no">113</span><span id="line-113">              HFileBlock block = prefetchStreamReader.readBlock(offset, onDiskSizeOfNextBlock,</span>
-<span class="source-line-no">114</span><span id="line-114">                /* cacheBlock= */true, /* pread= */false, false, false, null, null, true);</span>
-<span class="source-line-no">115</span><span id="line-115">              try {</span>
-<span class="source-line-no">116</span><span id="line-116">                if (!cacheConf.isInMemory()) {</span>
-<span class="source-line-no">117</span><span id="line-117">                  if (!cache.blockFitsIntoTheCache(block).orElse(true)) {</span>
-<span class="source-line-no">118</span><span id="line-118">                    LOG.warn(</span>
-<span class="source-line-no">119</span><span id="line-119">                      "Interrupting prefetch for file {} because block {} of size {} "</span>
-<span class="source-line-no">120</span><span id="line-120">                        + "doesn't fit in the available cache space. isCacheEnabled: {}",</span>
-<span class="source-line-no">121</span><span id="line-121">                      path, cacheKey, block.getOnDiskSizeWithHeader(), cache.isCacheEnabled());</span>
-<span class="source-line-no">122</span><span id="line-122">                    interrupted = true;</span>
-<span class="source-line-no">123</span><span id="line-123">                    break;</span>
-<span class="source-line-no">124</span><span id="line-124">                  }</span>
-<span class="source-line-no">125</span><span id="line-125">                  if (!cacheConf.isHeapUsageBelowThreshold()) {</span>
-<span class="source-line-no">126</span><span id="line-126">                    LOG.warn(</span>
-<span class="source-line-no">127</span><span id="line-127">                      "Interrupting prefetch because heap usage is above the threshold: {} "</span>
-<span class="source-line-no">128</span><span id="line-128">                        + "configured via {}",</span>
-<span class="source-line-no">129</span><span id="line-129">                      cacheConf.getHeapUsageThreshold(), CacheConfig.PREFETCH_HEAP_USAGE_THRESHOLD);</span>
-<span class="source-line-no">130</span><span id="line-130">                    interrupted = true;</span>
-<span class="source-line-no">131</span><span id="line-131">                    break;</span>
-<span class="source-line-no">132</span><span id="line-132">                  }</span>
-<span class="source-line-no">133</span><span id="line-133">                }</span>
-<span class="source-line-no">134</span><span id="line-134">                onDiskSizeOfNextBlock = block.getNextBlockOnDiskSize();</span>
-<span class="source-line-no">135</span><span id="line-135">                offset += block.getOnDiskSizeWithHeader();</span>
-<span class="source-line-no">136</span><span id="line-136">                blockCount++;</span>
-<span class="source-line-no">137</span><span id="line-137">                if (block.getBlockType().isData()) {</span>
-<span class="source-line-no">138</span><span id="line-138">                  dataBlockCount++;</span>
-<span class="source-line-no">139</span><span id="line-139">                }</span>
-<span class="source-line-no">140</span><span id="line-140">              } finally {</span>
-<span class="source-line-no">141</span><span id="line-141">                // Ideally here the readBlock won't find the block in cache. We call this</span>
-<span class="source-line-no">142</span><span id="line-142">                // readBlock so that block data is read from FS and cached in BC. we must call</span>
-<span class="source-line-no">143</span><span id="line-143">                // returnBlock here to decrease the reference count of block.</span>
-<span class="source-line-no">144</span><span id="line-144">                block.release();</span>
-<span class="source-line-no">145</span><span id="line-145">              }</span>
-<span class="source-line-no">146</span><span id="line-146">            }</span>
-<span class="source-line-no">147</span><span id="line-147">            if (!interrupted) {</span>
-<span class="source-line-no">148</span><span id="line-148">              cacheConf.getBlockCache().get().notifyFileCachingCompleted(path, blockCount,</span>
-<span class="source-line-no">149</span><span id="line-149">                dataBlockCount, offset);</span>
-<span class="source-line-no">150</span><span id="line-150">            }</span>
-<span class="source-line-no">151</span><span id="line-151">          } catch (IOException e) {</span>
-<span class="source-line-no">152</span><span id="line-152">            // IOExceptions are probably due to region closes (relocation, etc.)</span>
-<span class="source-line-no">153</span><span id="line-153">            if (LOG.isTraceEnabled()) {</span>
-<span class="source-line-no">154</span><span id="line-154">              LOG.trace("Prefetch " + getPathOffsetEndStr(path, offset, end), e);</span>
-<span class="source-line-no">155</span><span id="line-155">            }</span>
-<span class="source-line-no">156</span><span id="line-156">          } catch (Throwable e) {</span>
-<span class="source-line-no">157</span><span id="line-157">            // Other exceptions are interesting</span>
-<span class="source-line-no">158</span><span id="line-158">            LOG.warn("Prefetch " + getPathOffsetEndStr(path, offset, end), e);</span>
-<span class="source-line-no">159</span><span id="line-159">          } finally {</span>
-<span class="source-line-no">160</span><span id="line-160">            if (prefetchStreamReader != null) {</span>
-<span class="source-line-no">161</span><span id="line-161">              try {</span>
-<span class="source-line-no">162</span><span id="line-162">                prefetchStreamReader.close(false);</span>
-<span class="source-line-no">163</span><span id="line-163">              } catch (IOException e) {</span>
-<span class="source-line-no">164</span><span id="line-164">                LOG.warn("Close prefetch stream reader failed, path: " + path, e);</span>
-<span class="source-line-no">165</span><span id="line-165">              }</span>
-<span class="source-line-no">166</span><span id="line-166">            }</span>
-<span class="source-line-no">167</span><span id="line-167">            PrefetchExecutor.complete(path);</span>
-<span class="source-line-no">168</span><span id="line-168">          }</span>
-<span class="source-line-no">169</span><span id="line-169">        }</span>
-<span class="source-line-no">170</span><span id="line-170">      });</span>
-<span class="source-line-no">171</span><span id="line-171">    }</span>
-<span class="source-line-no">172</span><span id="line-172">  }</span>
-<span class="source-line-no">173</span><span id="line-173"></span>
-<span class="source-line-no">174</span><span id="line-174">  /*</span>
-<span class="source-line-no">175</span><span id="line-175">   * Get the region name for the given file path. A HFile is always kept under the &lt;region&gt;/&lt;column</span>
-<span class="source-line-no">176</span><span id="line-176">   * family&gt;/&lt;hfile&gt;. To find the region for a given hFile, just find the name of the grandparent</span>
-<span class="source-line-no">177</span><span id="line-177">   * directory.</span>
-<span class="source-line-no">178</span><span id="line-178">   */</span>
-<span class="source-line-no">179</span><span id="line-179">  private static String getRegionName(Path path) {</span>
-<span class="source-line-no">180</span><span id="line-180">    return path.getParent().getParent().getName();</span>
-<span class="source-line-no">181</span><span id="line-181">  }</span>
-<span class="source-line-no">182</span><span id="line-182"></span>
-<span class="source-line-no">183</span><span id="line-183">  private static String getPathOffsetEndStr(final Path path, final long offset, final long end) {</span>
-<span class="source-line-no">184</span><span id="line-184">    return "path=" + path.toString() + ", offset=" + offset + ", end=" + end;</span>
-<span class="source-line-no">185</span><span id="line-185">  }</span>
-<span class="source-line-no">186</span><span id="line-186"></span>
-<span class="source-line-no">187</span><span id="line-187">  public void close(boolean evictOnClose) throws IOException {</span>
-<span class="source-line-no">188</span><span id="line-188">    PrefetchExecutor.cancel(path);</span>
-<span class="source-line-no">189</span><span id="line-189">    // Deallocate blocks in load-on-open section</span>
-<span class="source-line-no">190</span><span id="line-190">    this.fileInfo.close();</span>
-<span class="source-line-no">191</span><span id="line-191">    // Deallocate data blocks</span>
-<span class="source-line-no">192</span><span id="line-192">    cacheConf.getBlockCache().ifPresent(cache -&gt; {</span>
-<span class="source-line-no">193</span><span id="line-193">      if (evictOnClose) {</span>
-<span class="source-line-no">194</span><span id="line-194">        int numEvicted = cache.evictBlocksByHfileName(name);</span>
-<span class="source-line-no">195</span><span id="line-195">        if (LOG.isTraceEnabled()) {</span>
-<span class="source-line-no">196</span><span id="line-196">          LOG.trace("On close, file= {} evicted= {} block(s)", name, numEvicted);</span>
-<span class="source-line-no">197</span><span id="line-197">        }</span>
-<span class="source-line-no">198</span><span id="line-198">      }</span>
-<span class="source-line-no">199</span><span id="line-199">    });</span>
-<span class="source-line-no">200</span><span id="line-200">    fsBlockReader.closeStreams();</span>
-<span class="source-line-no">201</span><span id="line-201">  }</span>
-<span class="source-line-no">202</span><span id="line-202">}</span>
+<span class="source-line-no">100</span><span id="line-100">                  // We need to reset this here, because we don't know the size of next block, since</span>
+<span class="source-line-no">101</span><span id="line-101">                  // we never recovered the current block.</span>
+<span class="source-line-no">102</span><span id="line-102">                  onDiskSizeOfNextBlock = -1;</span>
+<span class="source-line-no">103</span><span id="line-103">                  continue;</span>
+<span class="source-line-no">104</span><span id="line-104">                } else {</span>
+<span class="source-line-no">105</span><span id="line-105">                  LOG.debug("Found block for cache key {}, but couldn't get its size. "</span>
+<span class="source-line-no">106</span><span id="line-106">                    + "Maybe the cache implementation doesn't support it? "</span>
+<span class="source-line-no">107</span><span id="line-107">                    + "We'll need to read the block from cache or file system. ", cacheKey);</span>
+<span class="source-line-no">108</span><span id="line-108">                }</span>
+<span class="source-line-no">109</span><span id="line-109">              } else {</span>
+<span class="source-line-no">110</span><span id="line-110">                LOG.debug("No entry in the backing map for cache key {}. ", cacheKey);</span>
+<span class="source-line-no">111</span><span id="line-111">              }</span>
+<span class="source-line-no">112</span><span id="line-112">              // Perhaps we got our block from cache? Unlikely as this may be, if it happens, then</span>
+<span class="source-line-no">113</span><span id="line-113">              // the internal-to-hfileblock thread local which holds the overread that gets the</span>
+<span class="source-line-no">114</span><span id="line-114">              // next header, will not have happened...so, pass in the onDiskSize gotten from the</span>
+<span class="source-line-no">115</span><span id="line-115">              // cached block. This 'optimization' triggers extremely rarely I'd say.</span>
+<span class="source-line-no">116</span><span id="line-116">              HFileBlock block = prefetchStreamReader.readBlock(offset, onDiskSizeOfNextBlock,</span>
+<span class="source-line-no">117</span><span id="line-117">                /* cacheBlock= */true, /* pread= */false, false, false, null, null, true);</span>
+<span class="source-line-no">118</span><span id="line-118">              try {</span>
+<span class="source-line-no">119</span><span id="line-119">                if (!cacheConf.isInMemory()) {</span>
+<span class="source-line-no">120</span><span id="line-120">                  if (!cache.blockFitsIntoTheCache(block).orElse(true)) {</span>
+<span class="source-line-no">121</span><span id="line-121">                    LOG.warn(</span>
+<span class="source-line-no">122</span><span id="line-122">                      "Interrupting prefetch for file {} because block {} of size {} "</span>
+<span class="source-line-no">123</span><span id="line-123">                        + "doesn't fit in the available cache space. isCacheEnabled: {}",</span>
+<span class="source-line-no">124</span><span id="line-124">                      path, cacheKey, block.getOnDiskSizeWithHeader(), cache.isCacheEnabled());</span>
+<span class="source-line-no">125</span><span id="line-125">                    interrupted = true;</span>
+<span class="source-line-no">126</span><span id="line-126">                    break;</span>
+<span class="source-line-no">127</span><span id="line-127">                  }</span>
+<span class="source-line-no">128</span><span id="line-128">                  if (!cacheConf.isHeapUsageBelowThreshold()) {</span>
+<span class="source-line-no">129</span><span id="line-129">                    LOG.warn(</span>
+<span class="source-line-no">130</span><span id="line-130">                      "Interrupting prefetch because heap usage is above the threshold: {} "</span>
+<span class="source-line-no">131</span><span id="line-131">                        + "configured via {}",</span>
+<span class="source-line-no">132</span><span id="line-132">                      cacheConf.getHeapUsageThreshold(), CacheConfig.PREFETCH_HEAP_USAGE_THRESHOLD);</span>
+<span class="source-line-no">133</span><span id="line-133">                    interrupted = true;</span>
+<span class="source-line-no">134</span><span id="line-134">                    break;</span>
+<span class="source-line-no">135</span><span id="line-135">                  }</span>
+<span class="source-line-no">136</span><span id="line-136">                }</span>
+<span class="source-line-no">137</span><span id="line-137">                onDiskSizeOfNextBlock = block.getNextBlockOnDiskSize();</span>
+<span class="source-line-no">138</span><span id="line-138">                offset += block.getOnDiskSizeWithHeader();</span>
+<span class="source-line-no">139</span><span id="line-139">                blockCount++;</span>
+<span class="source-line-no">140</span><span id="line-140">                if (block.getBlockType().isData()) {</span>
+<span class="source-line-no">141</span><span id="line-141">                  dataBlockCount++;</span>
+<span class="source-line-no">142</span><span id="line-142">                }</span>
+<span class="source-line-no">143</span><span id="line-143">              } finally {</span>
+<span class="source-line-no">144</span><span id="line-144">                // Ideally here the readBlock won't find the block in cache. We call this</span>
+<span class="source-line-no">145</span><span id="line-145">                // readBlock so that block data is read from FS and cached in BC. we must call</span>
+<span class="source-line-no">146</span><span id="line-146">                // returnBlock here to decrease the reference count of block.</span>
+<span class="source-line-no">147</span><span id="line-147">                block.release();</span>
+<span class="source-line-no">148</span><span id="line-148">              }</span>
+<span class="source-line-no">149</span><span id="line-149">            }</span>
+<span class="source-line-no">150</span><span id="line-150">            if (!interrupted) {</span>
+<span class="source-line-no">151</span><span id="line-151">              cacheConf.getBlockCache().get().notifyFileCachingCompleted(path, blockCount,</span>
+<span class="source-line-no">152</span><span id="line-152">                dataBlockCount, offset);</span>
+<span class="source-line-no">153</span><span id="line-153">            }</span>
+<span class="source-line-no">154</span><span id="line-154">          } catch (IOException e) {</span>
+<span class="source-line-no">155</span><span id="line-155">            // IOExceptions are probably due to region closes (relocation, etc.)</span>
+<span class="source-line-no">156</span><span id="line-156">            if (LOG.isDebugEnabled()) {</span>
+<span class="source-line-no">157</span><span id="line-157">              LOG.debug("Prefetch " + getPathOffsetEndStr(path, offset, end), e);</span>
+<span class="source-line-no">158</span><span id="line-158">            }</span>
+<span class="source-line-no">159</span><span id="line-159">          } catch (Throwable e) {</span>
+<span class="source-line-no">160</span><span id="line-160">            // Other exceptions are interesting</span>
+<span class="source-line-no">161</span><span id="line-161">            LOG.warn("Prefetch " + getPathOffsetEndStr(path, offset, end), e);</span>
+<span class="source-line-no">162</span><span id="line-162">          } finally {</span>
+<span class="source-line-no">163</span><span id="line-163">            if (prefetchStreamReader != null) {</span>
+<span class="source-line-no">164</span><span id="line-164">              try {</span>
+<span class="source-line-no">165</span><span id="line-165">                prefetchStreamReader.close(false);</span>
+<span class="source-line-no">166</span><span id="line-166">              } catch (IOException e) {</span>
+<span class="source-line-no">167</span><span id="line-167">                LOG.warn("Close prefetch stream reader failed, path: " + path, e);</span>
+<span class="source-line-no">168</span><span id="line-168">              }</span>
+<span class="source-line-no">169</span><span id="line-169">            }</span>
+<span class="source-line-no">170</span><span id="line-170">            PrefetchExecutor.complete(path);</span>
+<span class="source-line-no">171</span><span id="line-171">          }</span>
+<span class="source-line-no">172</span><span id="line-172">        }</span>
+<span class="source-line-no">173</span><span id="line-173">      });</span>
+<span class="source-line-no">174</span><span id="line-174">    }</span>
+<span class="source-line-no">175</span><span id="line-175">  }</span>
+<span class="source-line-no">176</span><span id="line-176"></span>
+<span class="source-line-no">177</span><span id="line-177">  /*</span>
+<span class="source-line-no">178</span><span id="line-178">   * Get the region name for the given file path. A HFile is always kept under the &lt;region&gt;/&lt;column</span>
+<span class="source-line-no">179</span><span id="line-179">   * family&gt;/&lt;hfile&gt;. To find the region for a given hFile, just find the name of the grandparent</span>
+<span class="source-line-no">180</span><span id="line-180">   * directory.</span>
+<span class="source-line-no">181</span><span id="line-181">   */</span>
+<span class="source-line-no">182</span><span id="line-182">  private static String getRegionName(Path path) {</span>
+<span class="source-line-no">183</span><span id="line-183">    return path.getParent().getParent().getName();</span>
+<span class="source-line-no">184</span><span id="line-184">  }</span>
+<span class="source-line-no">185</span><span id="line-185"></span>
+<span class="source-line-no">186</span><span id="line-186">  private static String getPathOffsetEndStr(final Path path, final long offset, final long end) {</span>
+<span class="source-line-no">187</span><span id="line-187">    return "path=" + path.toString() + ", offset=" + offset + ", end=" + end;</span>
+<span class="source-line-no">188</span><span id="line-188">  }</span>
+<span class="source-line-no">189</span><span id="line-189"></span>
+<span class="source-line-no">190</span><span id="line-190">  public void close(boolean evictOnClose) throws IOException {</span>
+<span class="source-line-no">191</span><span id="line-191">    PrefetchExecutor.cancel(path);</span>
+<span class="source-line-no">192</span><span id="line-192">    // Deallocate blocks in load-on-open section</span>
+<span class="source-line-no">193</span><span id="line-193">    this.fileInfo.close();</span>
+<span class="source-line-no">194</span><span id="line-194">    // Deallocate data blocks</span>
+<span class="source-line-no">195</span><span id="line-195">    cacheConf.getBlockCache().ifPresent(cache -&gt; {</span>
+<span class="source-line-no">196</span><span id="line-196">      if (evictOnClose) {</span>
+<span class="source-line-no">197</span><span id="line-197">        int numEvicted = cache.evictBlocksByHfileName(name);</span>
+<span class="source-line-no">198</span><span id="line-198">        if (LOG.isTraceEnabled()) {</span>
+<span class="source-line-no">199</span><span id="line-199">          LOG.trace("On close, file= {} evicted= {} block(s)", name, numEvicted);</span>
+<span class="source-line-no">200</span><span id="line-200">        }</span>
+<span class="source-line-no">201</span><span id="line-201">      }</span>
+<span class="source-line-no">202</span><span id="line-202">    });</span>
+<span class="source-line-no">203</span><span id="line-203">    fsBlockReader.closeStreams();</span>
+<span class="source-line-no">204</span><span id="line-204">  }</span>
+<span class="source-line-no">205</span><span id="line-205">}</span>
 
 
 
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/master/MasterAnnotationReadingPriorityFunction.html b/apidocs/src-html/org/apache/hadoop/hbase/master/MasterAnnotationReadingPriorityFunction.html
index ecfa6818e83..a87b199bc7d 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/master/MasterAnnotationReadingPriorityFunction.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/master/MasterAnnotationReadingPriorityFunction.html
@@ -105,8 +105,8 @@
 <span class="source-line-no">092</span><span id="line-92">      }</span>
 <span class="source-line-no">093</span><span id="line-93">      return HConstants.HIGH_QOS;</span>
 <span class="source-line-no">094</span><span id="line-94">    }</span>
-<span class="source-line-no">095</span><span id="line-95">    // also use HIGH_QOS for region server report</span>
-<span class="source-line-no">096</span><span id="line-96">    if (param instanceof RegionServerStatusProtos.RegionServerReportRequest) {</span>
+<span class="source-line-no">095</span><span id="line-95">    // also use HIGH_QOS for all rest methods in RegionServerStatusProtos</span>
+<span class="source-line-no">096</span><span id="line-96">    if (RegionServerStatusProtos.class.equals(param.getClass().getEnclosingClass())) {</span>
 <span class="source-line-no">097</span><span id="line-97">      return HConstants.HIGH_QOS;</span>
 <span class="source-line-no">098</span><span id="line-98">    }</span>
 <span class="source-line-no">099</span><span id="line-99">    // Trust the client-set priorities if set</span>
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html b/apidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html
index b6dc5944db2..427b9687755 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/master/MasterRpcServices.html
@@ -621,22 +621,22 @@
 <span class="source-line-no">608</span><span id="line-608">  }</span>
 <span class="source-line-no">609</span><span id="line-609"></span>
 <span class="source-line-no">610</span><span id="line-610">  @Override</span>
-<span class="source-line-no">611</span><span id="line-611">  @QosPriority(priority = HConstants.ADMIN_QOS)</span>
-<span class="source-line-no">612</span><span id="line-612">  public GetLastFlushedSequenceIdResponse getLastFlushedSequenceId(RpcController controller,</span>
-<span class="source-line-no">613</span><span id="line-613">    GetLastFlushedSequenceIdRequest request) throws ServiceException {</span>
-<span class="source-line-no">614</span><span id="line-614">    try {</span>
-<span class="source-line-no">615</span><span id="line-615">      server.checkServiceStarted();</span>
-<span class="source-line-no">616</span><span id="line-616">    } catch (IOException ioe) {</span>
-<span class="source-line-no">617</span><span id="line-617">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">618</span><span id="line-618">    }</span>
-<span class="source-line-no">619</span><span id="line-619">    byte[] encodedRegionName = request.getRegionName().toByteArray();</span>
-<span class="source-line-no">620</span><span id="line-620">    RegionStoreSequenceIds ids =</span>
-<span class="source-line-no">621</span><span id="line-621">      server.getServerManager().getLastFlushedSequenceId(encodedRegionName);</span>
-<span class="source-line-no">622</span><span id="line-622">    return ResponseConverter.buildGetLastFlushedSequenceIdResponse(ids);</span>
-<span class="source-line-no">623</span><span id="line-623">  }</span>
-<span class="source-line-no">624</span><span id="line-624"></span>
-<span class="source-line-no">625</span><span id="line-625">  @Override</span>
-<span class="source-line-no">626</span><span id="line-626">  @QosPriority(priority = HConstants.ADMIN_QOS)</span>
+<span class="source-line-no">611</span><span id="line-611">  // priority for all RegionServerStatusProtos rpc's are set HIGH_QOS in</span>
+<span class="source-line-no">612</span><span id="line-612">  // MasterAnnotationReadingPriorityFunction itself</span>
+<span class="source-line-no">613</span><span id="line-613">  public GetLastFlushedSequenceIdResponse getLastFlushedSequenceId(RpcController controller,</span>
+<span class="source-line-no">614</span><span id="line-614">    GetLastFlushedSequenceIdRequest request) throws ServiceException {</span>
+<span class="source-line-no">615</span><span id="line-615">    try {</span>
+<span class="source-line-no">616</span><span id="line-616">      server.checkServiceStarted();</span>
+<span class="source-line-no">617</span><span id="line-617">    } catch (IOException ioe) {</span>
+<span class="source-line-no">618</span><span id="line-618">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">619</span><span id="line-619">    }</span>
+<span class="source-line-no">620</span><span id="line-620">    byte[] encodedRegionName = request.getRegionName().toByteArray();</span>
+<span class="source-line-no">621</span><span id="line-621">    RegionStoreSequenceIds ids =</span>
+<span class="source-line-no">622</span><span id="line-622">      server.getServerManager().getLastFlushedSequenceId(encodedRegionName);</span>
+<span class="source-line-no">623</span><span id="line-623">    return ResponseConverter.buildGetLastFlushedSequenceIdResponse(ids);</span>
+<span class="source-line-no">624</span><span id="line-624">  }</span>
+<span class="source-line-no">625</span><span id="line-625"></span>
+<span class="source-line-no">626</span><span id="line-626">  @Override</span>
 <span class="source-line-no">627</span><span id="line-627">  public RegionServerReportResponse regionServerReport(RpcController controller,</span>
 <span class="source-line-no">628</span><span id="line-628">    RegionServerReportRequest request) throws ServiceException {</span>
 <span class="source-line-no">629</span><span id="line-629">    try {</span>
@@ -672,3009 +672,3007 @@
 <span class="source-line-no">659</span><span id="line-659">  }</span>
 <span class="source-line-no">660</span><span id="line-660"></span>
 <span class="source-line-no">661</span><span id="line-661">  @Override</span>
-<span class="source-line-no">662</span><span id="line-662">  @QosPriority(priority = HConstants.ADMIN_QOS)</span>
-<span class="source-line-no">663</span><span id="line-663">  public RegionServerStartupResponse regionServerStartup(RpcController controller,</span>
-<span class="source-line-no">664</span><span id="line-664">    RegionServerStartupRequest request) throws ServiceException {</span>
-<span class="source-line-no">665</span><span id="line-665">    // Register with server manager</span>
-<span class="source-line-no">666</span><span id="line-666">    try {</span>
-<span class="source-line-no">667</span><span id="line-667">      server.checkServiceStarted();</span>
-<span class="source-line-no">668</span><span id="line-668">      int versionNumber = 0;</span>
-<span class="source-line-no">669</span><span id="line-669">      String version = "0.0.0";</span>
-<span class="source-line-no">670</span><span id="line-670">      VersionInfo versionInfo = VersionInfoUtil.getCurrentClientVersionInfo();</span>
-<span class="source-line-no">671</span><span id="line-671">      if (versionInfo != null) {</span>
-<span class="source-line-no">672</span><span id="line-672">        version = versionInfo.getVersion();</span>
-<span class="source-line-no">673</span><span id="line-673">        versionNumber = VersionInfoUtil.getVersionNumber(versionInfo);</span>
-<span class="source-line-no">674</span><span id="line-674">      }</span>
-<span class="source-line-no">675</span><span id="line-675">      InetAddress ia = server.getRemoteInetAddress(request.getPort(), request.getServerStartCode());</span>
-<span class="source-line-no">676</span><span id="line-676">      // if regionserver passed hostname to use,</span>
-<span class="source-line-no">677</span><span id="line-677">      // then use it instead of doing a reverse DNS lookup</span>
-<span class="source-line-no">678</span><span id="line-678">      ServerName rs =</span>
-<span class="source-line-no">679</span><span id="line-679">        server.getServerManager().regionServerStartup(request, versionNumber, version, ia);</span>
-<span class="source-line-no">680</span><span id="line-680"></span>
-<span class="source-line-no">681</span><span id="line-681">      // Send back some config info</span>
-<span class="source-line-no">682</span><span id="line-682">      RegionServerStartupResponse.Builder resp = createConfigurationSubset();</span>
-<span class="source-line-no">683</span><span id="line-683">      NameStringPair.Builder entry = NameStringPair.newBuilder()</span>
-<span class="source-line-no">684</span><span id="line-684">        .setName(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER).setValue(rs.getHostname());</span>
-<span class="source-line-no">685</span><span id="line-685">      resp.addMapEntries(entry.build());</span>
-<span class="source-line-no">686</span><span id="line-686"></span>
-<span class="source-line-no">687</span><span id="line-687">      return resp.build();</span>
-<span class="source-line-no">688</span><span id="line-688">    } catch (IOException ioe) {</span>
-<span class="source-line-no">689</span><span id="line-689">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">690</span><span id="line-690">    }</span>
-<span class="source-line-no">691</span><span id="line-691">  }</span>
-<span class="source-line-no">692</span><span id="line-692"></span>
-<span class="source-line-no">693</span><span id="line-693">  @Override</span>
-<span class="source-line-no">694</span><span id="line-694">  @QosPriority(priority = HConstants.ADMIN_QOS)</span>
-<span class="source-line-no">695</span><span id="line-695">  public ReportRSFatalErrorResponse reportRSFatalError(RpcController controller,</span>
-<span class="source-line-no">696</span><span id="line-696">    ReportRSFatalErrorRequest request) throws ServiceException {</span>
-<span class="source-line-no">697</span><span id="line-697">    String errorText = request.getErrorMessage();</span>
-<span class="source-line-no">698</span><span id="line-698">    ServerName sn = ProtobufUtil.toServerName(request.getServer());</span>
-<span class="source-line-no">699</span><span id="line-699">    String msg = sn + " reported a fatal error:\n" + errorText;</span>
-<span class="source-line-no">700</span><span id="line-700">    LOG.warn(msg);</span>
-<span class="source-line-no">701</span><span id="line-701">    server.rsFatals.add(msg);</span>
-<span class="source-line-no">702</span><span id="line-702">    return ReportRSFatalErrorResponse.newBuilder().build();</span>
-<span class="source-line-no">703</span><span id="line-703">  }</span>
-<span class="source-line-no">704</span><span id="line-704"></span>
-<span class="source-line-no">705</span><span id="line-705">  @Override</span>
-<span class="source-line-no">706</span><span id="line-706">  public AddColumnResponse addColumn(RpcController controller, AddColumnRequest req)</span>
-<span class="source-line-no">707</span><span id="line-707">    throws ServiceException {</span>
-<span class="source-line-no">708</span><span id="line-708">    try {</span>
-<span class="source-line-no">709</span><span id="line-709">      long procId = server.addColumn(ProtobufUtil.toTableName(req.getTableName()),</span>
-<span class="source-line-no">710</span><span id="line-710">        ProtobufUtil.toColumnFamilyDescriptor(req.getColumnFamilies()), req.getNonceGroup(),</span>
-<span class="source-line-no">711</span><span id="line-711">        req.getNonce());</span>
-<span class="source-line-no">712</span><span id="line-712">      if (procId == -1) {</span>
-<span class="source-line-no">713</span><span id="line-713">        // This mean operation was not performed in server, so do not set any procId</span>
-<span class="source-line-no">714</span><span id="line-714">        return AddColumnResponse.newBuilder().build();</span>
-<span class="source-line-no">715</span><span id="line-715">      } else {</span>
-<span class="source-line-no">716</span><span id="line-716">        return AddColumnResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">717</span><span id="line-717">      }</span>
-<span class="source-line-no">718</span><span id="line-718">    } catch (IOException ioe) {</span>
-<span class="source-line-no">719</span><span id="line-719">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">720</span><span id="line-720">    }</span>
-<span class="source-line-no">721</span><span id="line-721">  }</span>
-<span class="source-line-no">722</span><span id="line-722"></span>
-<span class="source-line-no">723</span><span id="line-723">  @Override</span>
-<span class="source-line-no">724</span><span id="line-724">  public AssignRegionResponse assignRegion(RpcController controller, AssignRegionRequest req)</span>
-<span class="source-line-no">725</span><span id="line-725">    throws ServiceException {</span>
-<span class="source-line-no">726</span><span id="line-726">    try {</span>
-<span class="source-line-no">727</span><span id="line-727">      server.checkInitialized();</span>
-<span class="source-line-no">728</span><span id="line-728"></span>
-<span class="source-line-no">729</span><span id="line-729">      final RegionSpecifierType type = req.getRegion().getType();</span>
-<span class="source-line-no">730</span><span id="line-730">      if (type != RegionSpecifierType.REGION_NAME) {</span>
-<span class="source-line-no">731</span><span id="line-731">        LOG.warn("assignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span>
-<span class="source-line-no">732</span><span id="line-732">          + " actual: " + type);</span>
-<span class="source-line-no">733</span><span id="line-733">      }</span>
-<span class="source-line-no">734</span><span id="line-734"></span>
-<span class="source-line-no">735</span><span id="line-735">      final byte[] regionName = req.getRegion().getValue().toByteArray();</span>
-<span class="source-line-no">736</span><span id="line-736">      final RegionInfo regionInfo = server.getAssignmentManager().getRegionInfo(regionName);</span>
-<span class="source-line-no">737</span><span id="line-737">      if (regionInfo == null) {</span>
-<span class="source-line-no">738</span><span id="line-738">        throw new UnknownRegionException(Bytes.toStringBinary(regionName));</span>
-<span class="source-line-no">739</span><span id="line-739">      }</span>
-<span class="source-line-no">740</span><span id="line-740"></span>
-<span class="source-line-no">741</span><span id="line-741">      final AssignRegionResponse arr = AssignRegionResponse.newBuilder().build();</span>
-<span class="source-line-no">742</span><span id="line-742">      if (server.cpHost != null) {</span>
-<span class="source-line-no">743</span><span id="line-743">        server.cpHost.preAssign(regionInfo);</span>
-<span class="source-line-no">744</span><span id="line-744">      }</span>
-<span class="source-line-no">745</span><span id="line-745">      LOG.info(server.getClientIdAuditPrefix() + " assign " + regionInfo.getRegionNameAsString());</span>
-<span class="source-line-no">746</span><span id="line-746">      server.getAssignmentManager().assign(regionInfo);</span>
-<span class="source-line-no">747</span><span id="line-747">      if (server.cpHost != null) {</span>
-<span class="source-line-no">748</span><span id="line-748">        server.cpHost.postAssign(regionInfo);</span>
-<span class="source-line-no">749</span><span id="line-749">      }</span>
-<span class="source-line-no">750</span><span id="line-750">      return arr;</span>
-<span class="source-line-no">751</span><span id="line-751">    } catch (IOException ioe) {</span>
-<span class="source-line-no">752</span><span id="line-752">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">753</span><span id="line-753">    }</span>
-<span class="source-line-no">754</span><span id="line-754">  }</span>
-<span class="source-line-no">755</span><span id="line-755"></span>
-<span class="source-line-no">756</span><span id="line-756">  @Override</span>
-<span class="source-line-no">757</span><span id="line-757">  public MasterProtos.BalanceResponse balance(RpcController controller,</span>
-<span class="source-line-no">758</span><span id="line-758">    MasterProtos.BalanceRequest request) throws ServiceException {</span>
-<span class="source-line-no">759</span><span id="line-759">    try {</span>
-<span class="source-line-no">760</span><span id="line-760">      return ProtobufUtil.toBalanceResponse(server.balance(ProtobufUtil.toBalanceRequest(request)));</span>
-<span class="source-line-no">761</span><span id="line-761">    } catch (IOException ex) {</span>
-<span class="source-line-no">762</span><span id="line-762">      throw new ServiceException(ex);</span>
-<span class="source-line-no">763</span><span id="line-763">    }</span>
-<span class="source-line-no">764</span><span id="line-764">  }</span>
-<span class="source-line-no">765</span><span id="line-765"></span>
-<span class="source-line-no">766</span><span id="line-766">  @Override</span>
-<span class="source-line-no">767</span><span id="line-767">  public CreateNamespaceResponse createNamespace(RpcController controller,</span>
-<span class="source-line-no">768</span><span id="line-768">    CreateNamespaceRequest request) throws ServiceException {</span>
-<span class="source-line-no">769</span><span id="line-769">    try {</span>
-<span class="source-line-no">770</span><span id="line-770">      long procId =</span>
-<span class="source-line-no">771</span><span id="line-771">        server.createNamespace(ProtobufUtil.toNamespaceDescriptor(request.getNamespaceDescriptor()),</span>
-<span class="source-line-no">772</span><span id="line-772">          request.getNonceGroup(), request.getNonce());</span>
-<span class="source-line-no">773</span><span id="line-773">      return CreateNamespaceResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">774</span><span id="line-774">    } catch (IOException e) {</span>
-<span class="source-line-no">775</span><span id="line-775">      throw new ServiceException(e);</span>
-<span class="source-line-no">776</span><span id="line-776">    }</span>
-<span class="source-line-no">777</span><span id="line-777">  }</span>
-<span class="source-line-no">778</span><span id="line-778"></span>
-<span class="source-line-no">779</span><span id="line-779">  @Override</span>
-<span class="source-line-no">780</span><span id="line-780">  public CreateTableResponse createTable(RpcController controller, CreateTableRequest req)</span>
-<span class="source-line-no">781</span><span id="line-781">    throws ServiceException {</span>
-<span class="source-line-no">782</span><span id="line-782">    TableDescriptor tableDescriptor = ProtobufUtil.toTableDescriptor(req.getTableSchema());</span>
-<span class="source-line-no">783</span><span id="line-783">    byte[][] splitKeys = ProtobufUtil.getSplitKeysArray(req);</span>
-<span class="source-line-no">784</span><span id="line-784">    try {</span>
-<span class="source-line-no">785</span><span id="line-785">      long procId =</span>
-<span class="source-line-no">786</span><span id="line-786">        server.createTable(tableDescriptor, splitKeys, req.getNonceGroup(), req.getNonce());</span>
-<span class="source-line-no">787</span><span id="line-787">      LOG.info(server.getClientIdAuditPrefix() + " procedure request for creating table: "</span>
-<span class="source-line-no">788</span><span id="line-788">        + req.getTableSchema().getTableName() + " procId is: " + procId);</span>
-<span class="source-line-no">789</span><span id="line-789">      return CreateTableResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">790</span><span id="line-790">    } catch (IOException ioe) {</span>
-<span class="source-line-no">791</span><span id="line-791">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">792</span><span id="line-792">    }</span>
-<span class="source-line-no">793</span><span id="line-793">  }</span>
-<span class="source-line-no">794</span><span id="line-794"></span>
-<span class="source-line-no">795</span><span id="line-795">  @Override</span>
-<span class="source-line-no">796</span><span id="line-796">  public DeleteColumnResponse deleteColumn(RpcController controller, DeleteColumnRequest req)</span>
-<span class="source-line-no">797</span><span id="line-797">    throws ServiceException {</span>
-<span class="source-line-no">798</span><span id="line-798">    try {</span>
-<span class="source-line-no">799</span><span id="line-799">      long procId = server.deleteColumn(ProtobufUtil.toTableName(req.getTableName()),</span>
-<span class="source-line-no">800</span><span id="line-800">        req.getColumnName().toByteArray(), req.getNonceGroup(), req.getNonce());</span>
-<span class="source-line-no">801</span><span id="line-801">      if (procId == -1) {</span>
-<span class="source-line-no">802</span><span id="line-802">        // This mean operation was not performed in server, so do not set any procId</span>
-<span class="source-line-no">803</span><span id="line-803">        return DeleteColumnResponse.newBuilder().build();</span>
-<span class="source-line-no">804</span><span id="line-804">      } else {</span>
-<span class="source-line-no">805</span><span id="line-805">        return DeleteColumnResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">806</span><span id="line-806">      }</span>
-<span class="source-line-no">807</span><span id="line-807">    } catch (IOException ioe) {</span>
-<span class="source-line-no">808</span><span id="line-808">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">809</span><span id="line-809">    }</span>
-<span class="source-line-no">810</span><span id="line-810">  }</span>
-<span class="source-line-no">811</span><span id="line-811"></span>
-<span class="source-line-no">812</span><span id="line-812">  @Override</span>
-<span class="source-line-no">813</span><span id="line-813">  public DeleteNamespaceResponse deleteNamespace(RpcController controller,</span>
-<span class="source-line-no">814</span><span id="line-814">    DeleteNamespaceRequest request) throws ServiceException {</span>
-<span class="source-line-no">815</span><span id="line-815">    try {</span>
-<span class="source-line-no">816</span><span id="line-816">      long procId = server.deleteNamespace(request.getNamespaceName(), request.getNonceGroup(),</span>
-<span class="source-line-no">817</span><span id="line-817">        request.getNonce());</span>
-<span class="source-line-no">818</span><span id="line-818">      return DeleteNamespaceResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">819</span><span id="line-819">    } catch (IOException e) {</span>
-<span class="source-line-no">820</span><span id="line-820">      throw new ServiceException(e);</span>
-<span class="source-line-no">821</span><span id="line-821">    }</span>
-<span class="source-line-no">822</span><span id="line-822">  }</span>
-<span class="source-line-no">823</span><span id="line-823"></span>
-<span class="source-line-no">824</span><span id="line-824">  /**</span>
-<span class="source-line-no">825</span><span id="line-825">   * Execute Delete Snapshot operation.</span>
-<span class="source-line-no">826</span><span id="line-826">   * @return DeleteSnapshotResponse (a protobuf wrapped void) if the snapshot existed and was</span>
-<span class="source-line-no">827</span><span id="line-827">   *         deleted properly.</span>
-<span class="source-line-no">828</span><span id="line-828">   * @throws ServiceException wrapping SnapshotDoesNotExistException if specified snapshot did not</span>
-<span class="source-line-no">829</span><span id="line-829">   *                          exist.</span>
-<span class="source-line-no">830</span><span id="line-830">   */</span>
-<span class="source-line-no">831</span><span id="line-831">  @Override</span>
-<span class="source-line-no">832</span><span id="line-832">  public DeleteSnapshotResponse deleteSnapshot(RpcController controller,</span>
-<span class="source-line-no">833</span><span id="line-833">    DeleteSnapshotRequest request) throws ServiceException {</span>
-<span class="source-line-no">834</span><span id="line-834">    try {</span>
-<span class="source-line-no">835</span><span id="line-835">      server.checkInitialized();</span>
-<span class="source-line-no">836</span><span id="line-836">      server.snapshotManager.checkSnapshotSupport();</span>
-<span class="source-line-no">837</span><span id="line-837"></span>
-<span class="source-line-no">838</span><span id="line-838">      LOG.info(server.getClientIdAuditPrefix() + " delete " + request.getSnapshot());</span>
-<span class="source-line-no">839</span><span id="line-839">      server.snapshotManager.deleteSnapshot(request.getSnapshot());</span>
-<span class="source-line-no">840</span><span id="line-840">      return DeleteSnapshotResponse.newBuilder().build();</span>
-<span class="source-line-no">841</span><span id="line-841">    } catch (IOException e) {</span>
-<span class="source-line-no">842</span><span id="line-842">      throw new ServiceException(e);</span>
-<span class="source-line-no">843</span><span id="line-843">    }</span>
-<span class="source-line-no">844</span><span id="line-844">  }</span>
-<span class="source-line-no">845</span><span id="line-845"></span>
-<span class="source-line-no">846</span><span id="line-846">  @Override</span>
-<span class="source-line-no">847</span><span id="line-847">  public DeleteTableResponse deleteTable(RpcController controller, DeleteTableRequest request)</span>
-<span class="source-line-no">848</span><span id="line-848">    throws ServiceException {</span>
-<span class="source-line-no">849</span><span id="line-849">    try {</span>
-<span class="source-line-no">850</span><span id="line-850">      long procId = server.deleteTable(ProtobufUtil.toTableName(request.getTableName()),</span>
-<span class="source-line-no">851</span><span id="line-851">        request.getNonceGroup(), request.getNonce());</span>
-<span class="source-line-no">852</span><span id="line-852">      return DeleteTableResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">853</span><span id="line-853">    } catch (IOException ioe) {</span>
-<span class="source-line-no">854</span><span id="line-854">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">855</span><span id="line-855">    }</span>
-<span class="source-line-no">856</span><span id="line-856">  }</span>
-<span class="source-line-no">857</span><span id="line-857"></span>
-<span class="source-line-no">858</span><span id="line-858">  @Override</span>
-<span class="source-line-no">859</span><span id="line-859">  public TruncateTableResponse truncateTable(RpcController controller, TruncateTableRequest request)</span>
-<span class="source-line-no">860</span><span id="line-860">    throws ServiceException {</span>
-<span class="source-line-no">861</span><span id="line-861">    try {</span>
-<span class="source-line-no">862</span><span id="line-862">      long procId = server.truncateTable(ProtobufUtil.toTableName(request.getTableName()),</span>
-<span class="source-line-no">863</span><span id="line-863">        request.getPreserveSplits(), request.getNonceGroup(), request.getNonce());</span>
-<span class="source-line-no">864</span><span id="line-864">      return TruncateTableResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">865</span><span id="line-865">    } catch (IOException ioe) {</span>
-<span class="source-line-no">866</span><span id="line-866">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">867</span><span id="line-867">    }</span>
-<span class="source-line-no">868</span><span id="line-868">  }</span>
-<span class="source-line-no">869</span><span id="line-869"></span>
-<span class="source-line-no">870</span><span id="line-870">  @Override</span>
-<span class="source-line-no">871</span><span id="line-871">  public DisableTableResponse disableTable(RpcController controller, DisableTableRequest request)</span>
-<span class="source-line-no">872</span><span id="line-872">    throws ServiceException {</span>
-<span class="source-line-no">873</span><span id="line-873">    try {</span>
-<span class="source-line-no">874</span><span id="line-874">      long procId = server.disableTable(ProtobufUtil.toTableName(request.getTableName()),</span>
-<span class="source-line-no">875</span><span id="line-875">        request.getNonceGroup(), request.getNonce());</span>
-<span class="source-line-no">876</span><span id="line-876">      return DisableTableResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">877</span><span id="line-877">    } catch (IOException ioe) {</span>
-<span class="source-line-no">878</span><span id="line-878">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">879</span><span id="line-879">    }</span>
-<span class="source-line-no">880</span><span id="line-880">  }</span>
-<span class="source-line-no">881</span><span id="line-881"></span>
-<span class="source-line-no">882</span><span id="line-882">  @Override</span>
-<span class="source-line-no">883</span><span id="line-883">  public EnableCatalogJanitorResponse enableCatalogJanitor(RpcController c,</span>
-<span class="source-line-no">884</span><span id="line-884">    EnableCatalogJanitorRequest req) throws ServiceException {</span>
-<span class="source-line-no">885</span><span id="line-885">    rpcPreCheck("enableCatalogJanitor");</span>
-<span class="source-line-no">886</span><span id="line-886">    return EnableCatalogJanitorResponse.newBuilder()</span>
-<span class="source-line-no">887</span><span id="line-887">      .setPrevValue(server.catalogJanitorChore.setEnabled(req.getEnable())).build();</span>
-<span class="source-line-no">888</span><span id="line-888">  }</span>
-<span class="source-line-no">889</span><span id="line-889"></span>
-<span class="source-line-no">890</span><span id="line-890">  @Override</span>
-<span class="source-line-no">891</span><span id="line-891">  public SetCleanerChoreRunningResponse setCleanerChoreRunning(RpcController c,</span>
-<span class="source-line-no">892</span><span id="line-892">    SetCleanerChoreRunningRequest req) throws ServiceException {</span>
-<span class="source-line-no">893</span><span id="line-893">    rpcPreCheck("setCleanerChoreRunning");</span>
-<span class="source-line-no">894</span><span id="line-894"></span>
-<span class="source-line-no">895</span><span id="line-895">    boolean prevValue =</span>
-<span class="source-line-no">896</span><span id="line-896">      server.getLogCleaner().getEnabled() &amp;&amp; server.getHFileCleaner().getEnabled();</span>
-<span class="source-line-no">897</span><span id="line-897">    server.getLogCleaner().setEnabled(req.getOn());</span>
-<span class="source-line-no">898</span><span id="line-898">    for (HFileCleaner hFileCleaner : server.getHFileCleaners()) {</span>
-<span class="source-line-no">899</span><span id="line-899">      hFileCleaner.setEnabled(req.getOn());</span>
-<span class="source-line-no">900</span><span id="line-900">    }</span>
-<span class="source-line-no">901</span><span id="line-901">    return SetCleanerChoreRunningResponse.newBuilder().setPrevValue(prevValue).build();</span>
-<span class="source-line-no">902</span><span id="line-902">  }</span>
-<span class="source-line-no">903</span><span id="line-903"></span>
-<span class="source-line-no">904</span><span id="line-904">  @Override</span>
-<span class="source-line-no">905</span><span id="line-905">  public EnableTableResponse enableTable(RpcController controller, EnableTableRequest request)</span>
-<span class="source-line-no">906</span><span id="line-906">    throws ServiceException {</span>
-<span class="source-line-no">907</span><span id="line-907">    try {</span>
-<span class="source-line-no">908</span><span id="line-908">      long procId = server.enableTable(ProtobufUtil.toTableName(request.getTableName()),</span>
-<span class="source-line-no">909</span><span id="line-909">        request.getNonceGroup(), request.getNonce());</span>
-<span class="source-line-no">910</span><span id="line-910">      return EnableTableResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">911</span><span id="line-911">    } catch (IOException ioe) {</span>
-<span class="source-line-no">912</span><span id="line-912">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">913</span><span id="line-913">    }</span>
-<span class="source-line-no">914</span><span id="line-914">  }</span>
-<span class="source-line-no">915</span><span id="line-915"></span>
-<span class="source-line-no">916</span><span id="line-916">  @Override</span>
-<span class="source-line-no">917</span><span id="line-917">  public MergeTableRegionsResponse mergeTableRegions(RpcController c,</span>
-<span class="source-line-no">918</span><span id="line-918">    MergeTableRegionsRequest request) throws ServiceException {</span>
-<span class="source-line-no">919</span><span id="line-919">    try {</span>
-<span class="source-line-no">920</span><span id="line-920">      server.checkInitialized();</span>
-<span class="source-line-no">921</span><span id="line-921">    } catch (IOException ioe) {</span>
-<span class="source-line-no">922</span><span id="line-922">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">923</span><span id="line-923">    }</span>
+<span class="source-line-no">662</span><span id="line-662">  public RegionServerStartupResponse regionServerStartup(RpcController controller,</span>
+<span class="source-line-no">663</span><span id="line-663">    RegionServerStartupRequest request) throws ServiceException {</span>
+<span class="source-line-no">664</span><span id="line-664">    // Register with server manager</span>
+<span class="source-line-no">665</span><span id="line-665">    try {</span>
+<span class="source-line-no">666</span><span id="line-666">      server.checkServiceStarted();</span>
+<span class="source-line-no">667</span><span id="line-667">      int versionNumber = 0;</span>
+<span class="source-line-no">668</span><span id="line-668">      String version = "0.0.0";</span>
+<span class="source-line-no">669</span><span id="line-669">      VersionInfo versionInfo = VersionInfoUtil.getCurrentClientVersionInfo();</span>
+<span class="source-line-no">670</span><span id="line-670">      if (versionInfo != null) {</span>
+<span class="source-line-no">671</span><span id="line-671">        version = versionInfo.getVersion();</span>
+<span class="source-line-no">672</span><span id="line-672">        versionNumber = VersionInfoUtil.getVersionNumber(versionInfo);</span>
+<span class="source-line-no">673</span><span id="line-673">      }</span>
+<span class="source-line-no">674</span><span id="line-674">      InetAddress ia = server.getRemoteInetAddress(request.getPort(), request.getServerStartCode());</span>
+<span class="source-line-no">675</span><span id="line-675">      // if regionserver passed hostname to use,</span>
+<span class="source-line-no">676</span><span id="line-676">      // then use it instead of doing a reverse DNS lookup</span>
+<span class="source-line-no">677</span><span id="line-677">      ServerName rs =</span>
+<span class="source-line-no">678</span><span id="line-678">        server.getServerManager().regionServerStartup(request, versionNumber, version, ia);</span>
+<span class="source-line-no">679</span><span id="line-679"></span>
+<span class="source-line-no">680</span><span id="line-680">      // Send back some config info</span>
+<span class="source-line-no">681</span><span id="line-681">      RegionServerStartupResponse.Builder resp = createConfigurationSubset();</span>
+<span class="source-line-no">682</span><span id="line-682">      NameStringPair.Builder entry = NameStringPair.newBuilder()</span>
+<span class="source-line-no">683</span><span id="line-683">        .setName(HConstants.KEY_FOR_HOSTNAME_SEEN_BY_MASTER).setValue(rs.getHostname());</span>
+<span class="source-line-no">684</span><span id="line-684">      resp.addMapEntries(entry.build());</span>
+<span class="source-line-no">685</span><span id="line-685"></span>
+<span class="source-line-no">686</span><span id="line-686">      return resp.build();</span>
+<span class="source-line-no">687</span><span id="line-687">    } catch (IOException ioe) {</span>
+<span class="source-line-no">688</span><span id="line-688">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">689</span><span id="line-689">    }</span>
+<span class="source-line-no">690</span><span id="line-690">  }</span>
+<span class="source-line-no">691</span><span id="line-691"></span>
+<span class="source-line-no">692</span><span id="line-692">  @Override</span>
+<span class="source-line-no">693</span><span id="line-693">  public ReportRSFatalErrorResponse reportRSFatalError(RpcController controller,</span>
+<span class="source-line-no">694</span><span id="line-694">    ReportRSFatalErrorRequest request) throws ServiceException {</span>
+<span class="source-line-no">695</span><span id="line-695">    String errorText = request.getErrorMessage();</span>
+<span class="source-line-no">696</span><span id="line-696">    ServerName sn = ProtobufUtil.toServerName(request.getServer());</span>
+<span class="source-line-no">697</span><span id="line-697">    String msg = sn + " reported a fatal error:\n" + errorText;</span>
+<span class="source-line-no">698</span><span id="line-698">    LOG.warn(msg);</span>
+<span class="source-line-no">699</span><span id="line-699">    server.rsFatals.add(msg);</span>
+<span class="source-line-no">700</span><span id="line-700">    return ReportRSFatalErrorResponse.newBuilder().build();</span>
+<span class="source-line-no">701</span><span id="line-701">  }</span>
+<span class="source-line-no">702</span><span id="line-702"></span>
+<span class="source-line-no">703</span><span id="line-703">  @Override</span>
+<span class="source-line-no">704</span><span id="line-704">  public AddColumnResponse addColumn(RpcController controller, AddColumnRequest req)</span>
+<span class="source-line-no">705</span><span id="line-705">    throws ServiceException {</span>
+<span class="source-line-no">706</span><span id="line-706">    try {</span>
+<span class="source-line-no">707</span><span id="line-707">      long procId = server.addColumn(ProtobufUtil.toTableName(req.getTableName()),</span>
+<span class="source-line-no">708</span><span id="line-708">        ProtobufUtil.toColumnFamilyDescriptor(req.getColumnFamilies()), req.getNonceGroup(),</span>
+<span class="source-line-no">709</span><span id="line-709">        req.getNonce());</span>
+<span class="source-line-no">710</span><span id="line-710">      if (procId == -1) {</span>
+<span class="source-line-no">711</span><span id="line-711">        // This mean operation was not performed in server, so do not set any procId</span>
+<span class="source-line-no">712</span><span id="line-712">        return AddColumnResponse.newBuilder().build();</span>
+<span class="source-line-no">713</span><span id="line-713">      } else {</span>
+<span class="source-line-no">714</span><span id="line-714">        return AddColumnResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">715</span><span id="line-715">      }</span>
+<span class="source-line-no">716</span><span id="line-716">    } catch (IOException ioe) {</span>
+<span class="source-line-no">717</span><span id="line-717">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">718</span><span id="line-718">    }</span>
+<span class="source-line-no">719</span><span id="line-719">  }</span>
+<span class="source-line-no">720</span><span id="line-720"></span>
+<span class="source-line-no">721</span><span id="line-721">  @Override</span>
+<span class="source-line-no">722</span><span id="line-722">  public AssignRegionResponse assignRegion(RpcController controller, AssignRegionRequest req)</span>
+<span class="source-line-no">723</span><span id="line-723">    throws ServiceException {</span>
+<span class="source-line-no">724</span><span id="line-724">    try {</span>
+<span class="source-line-no">725</span><span id="line-725">      server.checkInitialized();</span>
+<span class="source-line-no">726</span><span id="line-726"></span>
+<span class="source-line-no">727</span><span id="line-727">      final RegionSpecifierType type = req.getRegion().getType();</span>
+<span class="source-line-no">728</span><span id="line-728">      if (type != RegionSpecifierType.REGION_NAME) {</span>
+<span class="source-line-no">729</span><span id="line-729">        LOG.warn("assignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span>
+<span class="source-line-no">730</span><span id="line-730">          + " actual: " + type);</span>
+<span class="source-line-no">731</span><span id="line-731">      }</span>
+<span class="source-line-no">732</span><span id="line-732"></span>
+<span class="source-line-no">733</span><span id="line-733">      final byte[] regionName = req.getRegion().getValue().toByteArray();</span>
+<span class="source-line-no">734</span><span id="line-734">      final RegionInfo regionInfo = server.getAssignmentManager().getRegionInfo(regionName);</span>
+<span class="source-line-no">735</span><span id="line-735">      if (regionInfo == null) {</span>
+<span class="source-line-no">736</span><span id="line-736">        throw new UnknownRegionException(Bytes.toStringBinary(regionName));</span>
+<span class="source-line-no">737</span><span id="line-737">      }</span>
+<span class="source-line-no">738</span><span id="line-738"></span>
+<span class="source-line-no">739</span><span id="line-739">      final AssignRegionResponse arr = AssignRegionResponse.newBuilder().build();</span>
+<span class="source-line-no">740</span><span id="line-740">      if (server.cpHost != null) {</span>
+<span class="source-line-no">741</span><span id="line-741">        server.cpHost.preAssign(regionInfo);</span>
+<span class="source-line-no">742</span><span id="line-742">      }</span>
+<span class="source-line-no">743</span><span id="line-743">      LOG.info(server.getClientIdAuditPrefix() + " assign " + regionInfo.getRegionNameAsString());</span>
+<span class="source-line-no">744</span><span id="line-744">      server.getAssignmentManager().assign(regionInfo);</span>
+<span class="source-line-no">745</span><span id="line-745">      if (server.cpHost != null) {</span>
+<span class="source-line-no">746</span><span id="line-746">        server.cpHost.postAssign(regionInfo);</span>
+<span class="source-line-no">747</span><span id="line-747">      }</span>
+<span class="source-line-no">748</span><span id="line-748">      return arr;</span>
+<span class="source-line-no">749</span><span id="line-749">    } catch (IOException ioe) {</span>
+<span class="source-line-no">750</span><span id="line-750">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">751</span><span id="line-751">    }</span>
+<span class="source-line-no">752</span><span id="line-752">  }</span>
+<span class="source-line-no">753</span><span id="line-753"></span>
+<span class="source-line-no">754</span><span id="line-754">  @Override</span>
+<span class="source-line-no">755</span><span id="line-755">  public MasterProtos.BalanceResponse balance(RpcController controller,</span>
+<span class="source-line-no">756</span><span id="line-756">    MasterProtos.BalanceRequest request) throws ServiceException {</span>
+<span class="source-line-no">757</span><span id="line-757">    try {</span>
+<span class="source-line-no">758</span><span id="line-758">      return ProtobufUtil.toBalanceResponse(server.balance(ProtobufUtil.toBalanceRequest(request)));</span>
+<span class="source-line-no">759</span><span id="line-759">    } catch (IOException ex) {</span>
+<span class="source-line-no">760</span><span id="line-760">      throw new ServiceException(ex);</span>
+<span class="source-line-no">761</span><span id="line-761">    }</span>
+<span class="source-line-no">762</span><span id="line-762">  }</span>
+<span class="source-line-no">763</span><span id="line-763"></span>
+<span class="source-line-no">764</span><span id="line-764">  @Override</span>
+<span class="source-line-no">765</span><span id="line-765">  public CreateNamespaceResponse createNamespace(RpcController controller,</span>
+<span class="source-line-no">766</span><span id="line-766">    CreateNamespaceRequest request) throws ServiceException {</span>
+<span class="source-line-no">767</span><span id="line-767">    try {</span>
+<span class="source-line-no">768</span><span id="line-768">      long procId =</span>
+<span class="source-line-no">769</span><span id="line-769">        server.createNamespace(ProtobufUtil.toNamespaceDescriptor(request.getNamespaceDescriptor()),</span>
+<span class="source-line-no">770</span><span id="line-770">          request.getNonceGroup(), request.getNonce());</span>
+<span class="source-line-no">771</span><span id="line-771">      return CreateNamespaceResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">772</span><span id="line-772">    } catch (IOException e) {</span>
+<span class="source-line-no">773</span><span id="line-773">      throw new ServiceException(e);</span>
+<span class="source-line-no">774</span><span id="line-774">    }</span>
+<span class="source-line-no">775</span><span id="line-775">  }</span>
+<span class="source-line-no">776</span><span id="line-776"></span>
+<span class="source-line-no">777</span><span id="line-777">  @Override</span>
+<span class="source-line-no">778</span><span id="line-778">  public CreateTableResponse createTable(RpcController controller, CreateTableRequest req)</span>
+<span class="source-line-no">779</span><span id="line-779">    throws ServiceException {</span>
+<span class="source-line-no">780</span><span id="line-780">    TableDescriptor tableDescriptor = ProtobufUtil.toTableDescriptor(req.getTableSchema());</span>
+<span class="source-line-no">781</span><span id="line-781">    byte[][] splitKeys = ProtobufUtil.getSplitKeysArray(req);</span>
+<span class="source-line-no">782</span><span id="line-782">    try {</span>
+<span class="source-line-no">783</span><span id="line-783">      long procId =</span>
+<span class="source-line-no">784</span><span id="line-784">        server.createTable(tableDescriptor, splitKeys, req.getNonceGroup(), req.getNonce());</span>
+<span class="source-line-no">785</span><span id="line-785">      LOG.info(server.getClientIdAuditPrefix() + " procedure request for creating table: "</span>
+<span class="source-line-no">786</span><span id="line-786">        + req.getTableSchema().getTableName() + " procId is: " + procId);</span>
+<span class="source-line-no">787</span><span id="line-787">      return CreateTableResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">788</span><span id="line-788">    } catch (IOException ioe) {</span>
+<span class="source-line-no">789</span><span id="line-789">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">790</span><span id="line-790">    }</span>
+<span class="source-line-no">791</span><span id="line-791">  }</span>
+<span class="source-line-no">792</span><span id="line-792"></span>
+<span class="source-line-no">793</span><span id="line-793">  @Override</span>
+<span class="source-line-no">794</span><span id="line-794">  public DeleteColumnResponse deleteColumn(RpcController controller, DeleteColumnRequest req)</span>
+<span class="source-line-no">795</span><span id="line-795">    throws ServiceException {</span>
+<span class="source-line-no">796</span><span id="line-796">    try {</span>
+<span class="source-line-no">797</span><span id="line-797">      long procId = server.deleteColumn(ProtobufUtil.toTableName(req.getTableName()),</span>
+<span class="source-line-no">798</span><span id="line-798">        req.getColumnName().toByteArray(), req.getNonceGroup(), req.getNonce());</span>
+<span class="source-line-no">799</span><span id="line-799">      if (procId == -1) {</span>
+<span class="source-line-no">800</span><span id="line-800">        // This mean operation was not performed in server, so do not set any procId</span>
+<span class="source-line-no">801</span><span id="line-801">        return DeleteColumnResponse.newBuilder().build();</span>
+<span class="source-line-no">802</span><span id="line-802">      } else {</span>
+<span class="source-line-no">803</span><span id="line-803">        return DeleteColumnResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">804</span><span id="line-804">      }</span>
+<span class="source-line-no">805</span><span id="line-805">    } catch (IOException ioe) {</span>
+<span class="source-line-no">806</span><span id="line-806">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">807</span><span id="line-807">    }</span>
+<span class="source-line-no">808</span><span id="line-808">  }</span>
+<span class="source-line-no">809</span><span id="line-809"></span>
+<span class="source-line-no">810</span><span id="line-810">  @Override</span>
+<span class="source-line-no">811</span><span id="line-811">  public DeleteNamespaceResponse deleteNamespace(RpcController controller,</span>
+<span class="source-line-no">812</span><span id="line-812">    DeleteNamespaceRequest request) throws ServiceException {</span>
+<span class="source-line-no">813</span><span id="line-813">    try {</span>
+<span class="source-line-no">814</span><span id="line-814">      long procId = server.deleteNamespace(request.getNamespaceName(), request.getNonceGroup(),</span>
+<span class="source-line-no">815</span><span id="line-815">        request.getNonce());</span>
+<span class="source-line-no">816</span><span id="line-816">      return DeleteNamespaceResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">817</span><span id="line-817">    } catch (IOException e) {</span>
+<span class="source-line-no">818</span><span id="line-818">      throw new ServiceException(e);</span>
+<span class="source-line-no">819</span><span id="line-819">    }</span>
+<span class="source-line-no">820</span><span id="line-820">  }</span>
+<span class="source-line-no">821</span><span id="line-821"></span>
+<span class="source-line-no">822</span><span id="line-822">  /**</span>
+<span class="source-line-no">823</span><span id="line-823">   * Execute Delete Snapshot operation.</span>
+<span class="source-line-no">824</span><span id="line-824">   * @return DeleteSnapshotResponse (a protobuf wrapped void) if the snapshot existed and was</span>
+<span class="source-line-no">825</span><span id="line-825">   *         deleted properly.</span>
+<span class="source-line-no">826</span><span id="line-826">   * @throws ServiceException wrapping SnapshotDoesNotExistException if specified snapshot did not</span>
+<span class="source-line-no">827</span><span id="line-827">   *                          exist.</span>
+<span class="source-line-no">828</span><span id="line-828">   */</span>
+<span class="source-line-no">829</span><span id="line-829">  @Override</span>
+<span class="source-line-no">830</span><span id="line-830">  public DeleteSnapshotResponse deleteSnapshot(RpcController controller,</span>
+<span class="source-line-no">831</span><span id="line-831">    DeleteSnapshotRequest request) throws ServiceException {</span>
+<span class="source-line-no">832</span><span id="line-832">    try {</span>
+<span class="source-line-no">833</span><span id="line-833">      server.checkInitialized();</span>
+<span class="source-line-no">834</span><span id="line-834">      server.snapshotManager.checkSnapshotSupport();</span>
+<span class="source-line-no">835</span><span id="line-835"></span>
+<span class="source-line-no">836</span><span id="line-836">      LOG.info(server.getClientIdAuditPrefix() + " delete " + request.getSnapshot());</span>
+<span class="source-line-no">837</span><span id="line-837">      server.snapshotManager.deleteSnapshot(request.getSnapshot());</span>
+<span class="source-line-no">838</span><span id="line-838">      return DeleteSnapshotResponse.newBuilder().build();</span>
+<span class="source-line-no">839</span><span id="line-839">    } catch (IOException e) {</span>
+<span class="source-line-no">840</span><span id="line-840">      throw new ServiceException(e);</span>
+<span class="source-line-no">841</span><span id="line-841">    }</span>
+<span class="source-line-no">842</span><span id="line-842">  }</span>
+<span class="source-line-no">843</span><span id="line-843"></span>
+<span class="source-line-no">844</span><span id="line-844">  @Override</span>
+<span class="source-line-no">845</span><span id="line-845">  public DeleteTableResponse deleteTable(RpcController controller, DeleteTableRequest request)</span>
+<span class="source-line-no">846</span><span id="line-846">    throws ServiceException {</span>
+<span class="source-line-no">847</span><span id="line-847">    try {</span>
+<span class="source-line-no">848</span><span id="line-848">      long procId = server.deleteTable(ProtobufUtil.toTableName(request.getTableName()),</span>
+<span class="source-line-no">849</span><span id="line-849">        request.getNonceGroup(), request.getNonce());</span>
+<span class="source-line-no">850</span><span id="line-850">      return DeleteTableResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">851</span><span id="line-851">    } catch (IOException ioe) {</span>
+<span class="source-line-no">852</span><span id="line-852">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">853</span><span id="line-853">    }</span>
+<span class="source-line-no">854</span><span id="line-854">  }</span>
+<span class="source-line-no">855</span><span id="line-855"></span>
+<span class="source-line-no">856</span><span id="line-856">  @Override</span>
+<span class="source-line-no">857</span><span id="line-857">  public TruncateTableResponse truncateTable(RpcController controller, TruncateTableRequest request)</span>
+<span class="source-line-no">858</span><span id="line-858">    throws ServiceException {</span>
+<span class="source-line-no">859</span><span id="line-859">    try {</span>
+<span class="source-line-no">860</span><span id="line-860">      long procId = server.truncateTable(ProtobufUtil.toTableName(request.getTableName()),</span>
+<span class="source-line-no">861</span><span id="line-861">        request.getPreserveSplits(), request.getNonceGroup(), request.getNonce());</span>
+<span class="source-line-no">862</span><span id="line-862">      return TruncateTableResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">863</span><span id="line-863">    } catch (IOException ioe) {</span>
+<span class="source-line-no">864</span><span id="line-864">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">865</span><span id="line-865">    }</span>
+<span class="source-line-no">866</span><span id="line-866">  }</span>
+<span class="source-line-no">867</span><span id="line-867"></span>
+<span class="source-line-no">868</span><span id="line-868">  @Override</span>
+<span class="source-line-no">869</span><span id="line-869">  public DisableTableResponse disableTable(RpcController controller, DisableTableRequest request)</span>
+<span class="source-line-no">870</span><span id="line-870">    throws ServiceException {</span>
+<span class="source-line-no">871</span><span id="line-871">    try {</span>
+<span class="source-line-no">872</span><span id="line-872">      long procId = server.disableTable(ProtobufUtil.toTableName(request.getTableName()),</span>
+<span class="source-line-no">873</span><span id="line-873">        request.getNonceGroup(), request.getNonce());</span>
+<span class="source-line-no">874</span><span id="line-874">      return DisableTableResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">875</span><span id="line-875">    } catch (IOException ioe) {</span>
+<span class="source-line-no">876</span><span id="line-876">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">877</span><span id="line-877">    }</span>
+<span class="source-line-no">878</span><span id="line-878">  }</span>
+<span class="source-line-no">879</span><span id="line-879"></span>
+<span class="source-line-no">880</span><span id="line-880">  @Override</span>
+<span class="source-line-no">881</span><span id="line-881">  public EnableCatalogJanitorResponse enableCatalogJanitor(RpcController c,</span>
+<span class="source-line-no">882</span><span id="line-882">    EnableCatalogJanitorRequest req) throws ServiceException {</span>
+<span class="source-line-no">883</span><span id="line-883">    rpcPreCheck("enableCatalogJanitor");</span>
+<span class="source-line-no">884</span><span id="line-884">    return EnableCatalogJanitorResponse.newBuilder()</span>
+<span class="source-line-no">885</span><span id="line-885">      .setPrevValue(server.catalogJanitorChore.setEnabled(req.getEnable())).build();</span>
+<span class="source-line-no">886</span><span id="line-886">  }</span>
+<span class="source-line-no">887</span><span id="line-887"></span>
+<span class="source-line-no">888</span><span id="line-888">  @Override</span>
+<span class="source-line-no">889</span><span id="line-889">  public SetCleanerChoreRunningResponse setCleanerChoreRunning(RpcController c,</span>
+<span class="source-line-no">890</span><span id="line-890">    SetCleanerChoreRunningRequest req) throws ServiceException {</span>
+<span class="source-line-no">891</span><span id="line-891">    rpcPreCheck("setCleanerChoreRunning");</span>
+<span class="source-line-no">892</span><span id="line-892"></span>
+<span class="source-line-no">893</span><span id="line-893">    boolean prevValue =</span>
+<span class="source-line-no">894</span><span id="line-894">      server.getLogCleaner().getEnabled() &amp;&amp; server.getHFileCleaner().getEnabled();</span>
+<span class="source-line-no">895</span><span id="line-895">    server.getLogCleaner().setEnabled(req.getOn());</span>
+<span class="source-line-no">896</span><span id="line-896">    for (HFileCleaner hFileCleaner : server.getHFileCleaners()) {</span>
+<span class="source-line-no">897</span><span id="line-897">      hFileCleaner.setEnabled(req.getOn());</span>
+<span class="source-line-no">898</span><span id="line-898">    }</span>
+<span class="source-line-no">899</span><span id="line-899">    return SetCleanerChoreRunningResponse.newBuilder().setPrevValue(prevValue).build();</span>
+<span class="source-line-no">900</span><span id="line-900">  }</span>
+<span class="source-line-no">901</span><span id="line-901"></span>
+<span class="source-line-no">902</span><span id="line-902">  @Override</span>
+<span class="source-line-no">903</span><span id="line-903">  public EnableTableResponse enableTable(RpcController controller, EnableTableRequest request)</span>
+<span class="source-line-no">904</span><span id="line-904">    throws ServiceException {</span>
+<span class="source-line-no">905</span><span id="line-905">    try {</span>
+<span class="source-line-no">906</span><span id="line-906">      long procId = server.enableTable(ProtobufUtil.toTableName(request.getTableName()),</span>
+<span class="source-line-no">907</span><span id="line-907">        request.getNonceGroup(), request.getNonce());</span>
+<span class="source-line-no">908</span><span id="line-908">      return EnableTableResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">909</span><span id="line-909">    } catch (IOException ioe) {</span>
+<span class="source-line-no">910</span><span id="line-910">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">911</span><span id="line-911">    }</span>
+<span class="source-line-no">912</span><span id="line-912">  }</span>
+<span class="source-line-no">913</span><span id="line-913"></span>
+<span class="source-line-no">914</span><span id="line-914">  @Override</span>
+<span class="source-line-no">915</span><span id="line-915">  public MergeTableRegionsResponse mergeTableRegions(RpcController c,</span>
+<span class="source-line-no">916</span><span id="line-916">    MergeTableRegionsRequest request) throws ServiceException {</span>
+<span class="source-line-no">917</span><span id="line-917">    try {</span>
+<span class="source-line-no">918</span><span id="line-918">      server.checkInitialized();</span>
+<span class="source-line-no">919</span><span id="line-919">    } catch (IOException ioe) {</span>
+<span class="source-line-no">920</span><span id="line-920">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">921</span><span id="line-921">    }</span>
+<span class="source-line-no">922</span><span id="line-922"></span>
+<span class="source-line-no">923</span><span id="line-923">    RegionStates regionStates = server.getAssignmentManager().getRegionStates();</span>
 <span class="source-line-no">924</span><span id="line-924"></span>
-<span class="source-line-no">925</span><span id="line-925">    RegionStates regionStates = server.getAssignmentManager().getRegionStates();</span>
-<span class="source-line-no">926</span><span id="line-926"></span>
-<span class="source-line-no">927</span><span id="line-927">    RegionInfo[] regionsToMerge = new RegionInfo[request.getRegionCount()];</span>
-<span class="source-line-no">928</span><span id="line-928">    for (int i = 0; i &lt; request.getRegionCount(); i++) {</span>
-<span class="source-line-no">929</span><span id="line-929">      final byte[] encodedNameOfRegion = request.getRegion(i).getValue().toByteArray();</span>
-<span class="source-line-no">930</span><span id="line-930">      if (request.getRegion(i).getType() != RegionSpecifierType.ENCODED_REGION_NAME) {</span>
-<span class="source-line-no">931</span><span id="line-931">        LOG.warn("MergeRegions specifier type: expected: " + RegionSpecifierType.ENCODED_REGION_NAME</span>
-<span class="source-line-no">932</span><span id="line-932">          + " actual: region " + i + " =" + request.getRegion(i).getType());</span>
-<span class="source-line-no">933</span><span id="line-933">      }</span>
-<span class="source-line-no">934</span><span id="line-934">      RegionState regionState = regionStates.getRegionState(Bytes.toString(encodedNameOfRegion));</span>
-<span class="source-line-no">935</span><span id="line-935">      if (regionState == null) {</span>
-<span class="source-line-no">936</span><span id="line-936">        throw new ServiceException(</span>
-<span class="source-line-no">937</span><span id="line-937">          new UnknownRegionException(Bytes.toStringBinary(encodedNameOfRegion)));</span>
-<span class="source-line-no">938</span><span id="line-938">      }</span>
-<span class="source-line-no">939</span><span id="line-939">      regionsToMerge[i] = regionState.getRegion();</span>
-<span class="source-line-no">940</span><span id="line-940">    }</span>
-<span class="source-line-no">941</span><span id="line-941"></span>
-<span class="source-line-no">942</span><span id="line-942">    try {</span>
-<span class="source-line-no">943</span><span id="line-943">      long procId = server.mergeRegions(regionsToMerge, request.getForcible(),</span>
-<span class="source-line-no">944</span><span id="line-944">        request.getNonceGroup(), request.getNonce());</span>
-<span class="source-line-no">945</span><span id="line-945">      return MergeTableRegionsResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">946</span><span id="line-946">    } catch (IOException ioe) {</span>
-<span class="source-line-no">947</span><span id="line-947">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">948</span><span id="line-948">    }</span>
-<span class="source-line-no">949</span><span id="line-949">  }</span>
-<span class="source-line-no">950</span><span id="line-950"></span>
-<span class="source-line-no">951</span><span id="line-951">  @Override</span>
-<span class="source-line-no">952</span><span id="line-952">  public SplitTableRegionResponse splitRegion(final RpcController controller,</span>
-<span class="source-line-no">953</span><span id="line-953">    final SplitTableRegionRequest request) throws ServiceException {</span>
-<span class="source-line-no">954</span><span id="line-954">    try {</span>
-<span class="source-line-no">955</span><span id="line-955">      long procId = server.splitRegion(ProtobufUtil.toRegionInfo(request.getRegionInfo()),</span>
-<span class="source-line-no">956</span><span id="line-956">        request.hasSplitRow() ? request.getSplitRow().toByteArray() : null, request.getNonceGroup(),</span>
-<span class="source-line-no">957</span><span id="line-957">        request.getNonce());</span>
-<span class="source-line-no">958</span><span id="line-958">      return SplitTableRegionResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">959</span><span id="line-959">    } catch (IOException ie) {</span>
-<span class="source-line-no">960</span><span id="line-960">      throw new ServiceException(ie);</span>
-<span class="source-line-no">961</span><span id="line-961">    }</span>
-<span class="source-line-no">962</span><span id="line-962">  }</span>
-<span class="source-line-no">963</span><span id="line-963"></span>
-<span class="source-line-no">964</span><span id="line-964">  @Override</span>
-<span class="source-line-no">965</span><span id="line-965">  public MasterProtos.TruncateRegionResponse truncateRegion(RpcController controller,</span>
-<span class="source-line-no">966</span><span id="line-966">    final MasterProtos.TruncateRegionRequest request) throws ServiceException {</span>
-<span class="source-line-no">967</span><span id="line-967">    try {</span>
-<span class="source-line-no">968</span><span id="line-968">      long procId = server.truncateRegion(ProtobufUtil.toRegionInfo(request.getRegionInfo()),</span>
-<span class="source-line-no">969</span><span id="line-969">        request.getNonceGroup(), request.getNonce());</span>
-<span class="source-line-no">970</span><span id="line-970">      return MasterProtos.TruncateRegionResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">971</span><span id="line-971">    } catch (IOException ie) {</span>
-<span class="source-line-no">972</span><span id="line-972">      throw new ServiceException(ie);</span>
-<span class="source-line-no">973</span><span id="line-973">    }</span>
-<span class="source-line-no">974</span><span id="line-974">  }</span>
-<span class="source-line-no">975</span><span id="line-975"></span>
-<span class="source-line-no">976</span><span id="line-976">  @Override</span>
-<span class="source-line-no">977</span><span id="line-977">  public ClientProtos.CoprocessorServiceResponse execMasterService(final RpcController controller,</span>
-<span class="source-line-no">978</span><span id="line-978">    final ClientProtos.CoprocessorServiceRequest request) throws ServiceException {</span>
-<span class="source-line-no">979</span><span id="line-979">    rpcPreCheck("execMasterService");</span>
-<span class="source-line-no">980</span><span id="line-980">    try {</span>
-<span class="source-line-no">981</span><span id="line-981">      ServerRpcController execController = new ServerRpcController();</span>
-<span class="source-line-no">982</span><span id="line-982">      ClientProtos.CoprocessorServiceCall call = request.getCall();</span>
-<span class="source-line-no">983</span><span id="line-983">      String serviceName = call.getServiceName();</span>
-<span class="source-line-no">984</span><span id="line-984">      String methodName = call.getMethodName();</span>
-<span class="source-line-no">985</span><span id="line-985">      if (!server.coprocessorServiceHandlers.containsKey(serviceName)) {</span>
-<span class="source-line-no">986</span><span id="line-986">        throw new UnknownProtocolException(null,</span>
-<span class="source-line-no">987</span><span id="line-987">          "No registered Master Coprocessor Endpoint found for " + serviceName</span>
-<span class="source-line-no">988</span><span id="line-988">            + ". Has it been enabled?");</span>
-<span class="source-line-no">989</span><span id="line-989">      }</span>
-<span class="source-line-no">990</span><span id="line-990"></span>
-<span class="source-line-no">991</span><span id="line-991">      Service service = server.coprocessorServiceHandlers.get(serviceName);</span>
-<span class="source-line-no">992</span><span id="line-992">      ServiceDescriptor serviceDesc = service.getDescriptorForType();</span>
-<span class="source-line-no">993</span><span id="line-993">      MethodDescriptor methodDesc =</span>
-<span class="source-line-no">994</span><span id="line-994">        CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);</span>
-<span class="source-line-no">995</span><span id="line-995"></span>
-<span class="source-line-no">996</span><span id="line-996">      Message execRequest = CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());</span>
-<span class="source-line-no">997</span><span id="line-997">      final Message.Builder responseBuilder =</span>
-<span class="source-line-no">998</span><span id="line-998">        service.getResponsePrototype(methodDesc).newBuilderForType();</span>
-<span class="source-line-no">999</span><span id="line-999">      service.callMethod(methodDesc, execController, execRequest, (message) -&gt; {</span>
-<span class="source-line-no">1000</span><span id="line-1000">        if (message != null) {</span>
-<span class="source-line-no">1001</span><span id="line-1001">          responseBuilder.mergeFrom(message);</span>
-<span class="source-line-no">1002</span><span id="line-1002">        }</span>
-<span class="source-line-no">1003</span><span id="line-1003">      });</span>
-<span class="source-line-no">1004</span><span id="line-1004">      Message execResult = responseBuilder.build();</span>
-<span class="source-line-no">1005</span><span id="line-1005">      if (execController.getFailedOn() != null) {</span>
-<span class="source-line-no">1006</span><span id="line-1006">        throw execController.getFailedOn();</span>
-<span class="source-line-no">1007</span><span id="line-1007">      }</span>
-<span class="source-line-no">1008</span><span id="line-1008"></span>
-<span class="source-line-no">1009</span><span id="line-1009">      String remoteAddress = RpcServer.getRemoteAddress().map(InetAddress::toString).orElse("");</span>
-<span class="source-line-no">1010</span><span id="line-1010">      User caller = RpcServer.getRequestUser().orElse(null);</span>
-<span class="source-line-no">1011</span><span id="line-1011">      AUDITLOG.info("User {} (remote address: {}) master service request for {}.{}", caller,</span>
-<span class="source-line-no">1012</span><span id="line-1012">        remoteAddress, serviceName, methodName);</span>
-<span class="source-line-no">1013</span><span id="line-1013"></span>
-<span class="source-line-no">1014</span><span id="line-1014">      return CoprocessorRpcUtils.getResponse(execResult, HConstants.EMPTY_BYTE_ARRAY);</span>
-<span class="source-line-no">1015</span><span id="line-1015">    } catch (IOException ie) {</span>
-<span class="source-line-no">1016</span><span id="line-1016">      throw new ServiceException(ie);</span>
-<span class="source-line-no">1017</span><span id="line-1017">    }</span>
-<span class="source-line-no">1018</span><span id="line-1018">  }</span>
-<span class="source-line-no">1019</span><span id="line-1019"></span>
-<span class="source-line-no">1020</span><span id="line-1020">  /**</span>
-<span class="source-line-no">1021</span><span id="line-1021">   * Triggers an asynchronous attempt to run a distributed procedure. {@inheritDoc}</span>
-<span class="source-line-no">1022</span><span id="line-1022">   */</span>
-<span class="source-line-no">1023</span><span id="line-1023">  @Override</span>
-<span class="source-line-no">1024</span><span id="line-1024">  public ExecProcedureResponse execProcedure(RpcController controller, ExecProcedureRequest request)</span>
-<span class="source-line-no">1025</span><span id="line-1025">    throws ServiceException {</span>
-<span class="source-line-no">1026</span><span id="line-1026">    try {</span>
-<span class="source-line-no">1027</span><span id="line-1027">      server.checkInitialized();</span>
-<span class="source-line-no">1028</span><span id="line-1028">      ProcedureDescription desc = request.getProcedure();</span>
-<span class="source-line-no">1029</span><span id="line-1029">      MasterProcedureManager mpm =</span>
-<span class="source-line-no">1030</span><span id="line-1030">        server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span>
-<span class="source-line-no">1031</span><span id="line-1031">      if (mpm == null) {</span>
-<span class="source-line-no">1032</span><span id="line-1032">        throw new ServiceException(</span>
-<span class="source-line-no">1033</span><span id="line-1033">          new DoNotRetryIOException("The procedure is not registered: " + desc.getSignature()));</span>
-<span class="source-line-no">1034</span><span id="line-1034">      }</span>
-<span class="source-line-no">1035</span><span id="line-1035">      LOG.info(server.getClientIdAuditPrefix() + " procedure request for: " + desc.getSignature());</span>
-<span class="source-line-no">1036</span><span id="line-1036">      mpm.checkPermissions(desc, getAccessChecker(), RpcServer.getRequestUser().orElse(null));</span>
-<span class="source-line-no">1037</span><span id="line-1037">      mpm.execProcedure(desc);</span>
-<span class="source-line-no">1038</span><span id="line-1038">      // send back the max amount of time the client should wait for the procedure</span>
-<span class="source-line-no">1039</span><span id="line-1039">      // to complete</span>
-<span class="source-line-no">1040</span><span id="line-1040">      long waitTime = SnapshotDescriptionUtils.DEFAULT_MAX_WAIT_TIME;</span>
-<span class="source-line-no">1041</span><span id="line-1041">      return ExecProcedureResponse.newBuilder().setExpectedTimeout(waitTime).build();</span>
-<span class="source-line-no">1042</span><span id="line-1042">    } catch (ForeignException e) {</span>
-<span class="source-line-no">1043</span><span id="line-1043">      throw new ServiceException(e.getCause());</span>
-<span class="source-line-no">1044</span><span id="line-1044">    } catch (IOException e) {</span>
-<span class="source-line-no">1045</span><span id="line-1045">      throw new ServiceException(e);</span>
-<span class="source-line-no">1046</span><span id="line-1046">    }</span>
-<span class="source-line-no">1047</span><span id="line-1047">  }</span>
-<span class="source-line-no">1048</span><span id="line-1048"></span>
-<span class="source-line-no">1049</span><span id="line-1049">  /**</span>
-<span class="source-line-no">1050</span><span id="line-1050">   * Triggers a synchronous attempt to run a distributed procedure and sets return data in response.</span>
-<span class="source-line-no">1051</span><span id="line-1051">   * {@inheritDoc}</span>
-<span class="source-line-no">1052</span><span id="line-1052">   */</span>
-<span class="source-line-no">1053</span><span id="line-1053">  @Override</span>
-<span class="source-line-no">1054</span><span id="line-1054">  public ExecProcedureResponse execProcedureWithRet(RpcController controller,</span>
-<span class="source-line-no">1055</span><span id="line-1055">    ExecProcedureRequest request) throws ServiceException {</span>
-<span class="source-line-no">1056</span><span id="line-1056">    rpcPreCheck("execProcedureWithRet");</span>
-<span class="source-line-no">1057</span><span id="line-1057">    try {</span>
-<span class="source-line-no">1058</span><span id="line-1058">      ProcedureDescription desc = request.getProcedure();</span>
-<span class="source-line-no">1059</span><span id="line-1059">      MasterProcedureManager mpm =</span>
-<span class="source-line-no">1060</span><span id="line-1060">        server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span>
-<span class="source-line-no">1061</span><span id="line-1061">      if (mpm == null) {</span>
-<span class="source-line-no">1062</span><span id="line-1062">        throw new ServiceException("The procedure is not registered: " + desc.getSignature());</span>
-<span class="source-line-no">1063</span><span id="line-1063">      }</span>
-<span class="source-line-no">1064</span><span id="line-1064">      LOG.info(server.getClientIdAuditPrefix() + " procedure request for: " + desc.getSignature());</span>
-<span class="source-line-no">1065</span><span id="line-1065">      byte[] data = mpm.execProcedureWithRet(desc);</span>
-<span class="source-line-no">1066</span><span id="line-1066">      ExecProcedureResponse.Builder builder = ExecProcedureResponse.newBuilder();</span>
-<span class="source-line-no">1067</span><span id="line-1067">      // set return data if available</span>
-<span class="source-line-no">1068</span><span id="line-1068">      if (data != null) {</span>
-<span class="source-line-no">1069</span><span id="line-1069">        builder.setReturnData(UnsafeByteOperations.unsafeWrap(data));</span>
-<span class="source-line-no">1070</span><span id="line-1070">      }</span>
-<span class="source-line-no">1071</span><span id="line-1071">      return builder.build();</span>
-<span class="source-line-no">1072</span><span id="line-1072">    } catch (IOException e) {</span>
-<span class="source-line-no">1073</span><span id="line-1073">      throw new ServiceException(e);</span>
-<span class="source-line-no">1074</span><span id="line-1074">    }</span>
-<span class="source-line-no">1075</span><span id="line-1075">  }</span>
-<span class="source-line-no">1076</span><span id="line-1076"></span>
-<span class="source-line-no">1077</span><span id="line-1077">  @Override</span>
-<span class="source-line-no">1078</span><span id="line-1078">  public GetClusterStatusResponse getClusterStatus(RpcController controller,</span>
-<span class="source-line-no">1079</span><span id="line-1079">    GetClusterStatusRequest req) throws ServiceException {</span>
-<span class="source-line-no">1080</span><span id="line-1080">    GetClusterStatusResponse.Builder response = GetClusterStatusResponse.newBuilder();</span>
-<span class="source-line-no">1081</span><span id="line-1081">    try {</span>
-<span class="source-line-no">1082</span><span id="line-1082">      // We used to check if Master was up at this point but let this call proceed even if</span>
-<span class="source-line-no">1083</span><span id="line-1083">      // Master is initializing... else we shut out stuff like hbck2 tool from making progress</span>
-<span class="source-line-no">1084</span><span id="line-1084">      // since it queries this method to figure cluster version. hbck2 wants to be able to work</span>
-<span class="source-line-no">1085</span><span id="line-1085">      // against Master even if it is 'initializing' so it can do fixup.</span>
-<span class="source-line-no">1086</span><span id="line-1086">      response.setClusterStatus(ClusterMetricsBuilder.toClusterStatus(</span>
-<span class="source-line-no">1087</span><span id="line-1087">        server.getClusterMetrics(ClusterMetricsBuilder.toOptions(req.getOptionsList()))));</span>
-<span class="source-line-no">1088</span><span id="line-1088">    } catch (IOException e) {</span>
-<span class="source-line-no">1089</span><span id="line-1089">      throw new ServiceException(e);</span>
-<span class="source-line-no">1090</span><span id="line-1090">    }</span>
-<span class="source-line-no">1091</span><span id="line-1091">    return response.build();</span>
-<span class="source-line-no">1092</span><span id="line-1092">  }</span>
-<span class="source-line-no">1093</span><span id="line-1093"></span>
-<span class="source-line-no">1094</span><span id="line-1094">  /**</span>
-<span class="source-line-no">1095</span><span id="line-1095">   * List the currently available/stored snapshots. Any in-progress snapshots are ignored</span>
-<span class="source-line-no">1096</span><span id="line-1096">   */</span>
-<span class="source-line-no">1097</span><span id="line-1097">  @Override</span>
-<span class="source-line-no">1098</span><span id="line-1098">  public GetCompletedSnapshotsResponse getCompletedSnapshots(RpcController controller,</span>
-<span class="source-line-no">1099</span><span id="line-1099">    GetCompletedSnapshotsRequest request) throws ServiceException {</span>
-<span class="source-line-no">1100</span><span id="line-1100">    try {</span>
-<span class="source-line-no">1101</span><span id="line-1101">      server.checkInitialized();</span>
-<span class="source-line-no">1102</span><span id="line-1102">      GetCompletedSnapshotsResponse.Builder builder = GetCompletedSnapshotsResponse.newBuilder();</span>
-<span class="source-line-no">1103</span><span id="line-1103">      List&lt;SnapshotDescription&gt; snapshots = server.snapshotManager.getCompletedSnapshots();</span>
-<span class="source-line-no">1104</span><span id="line-1104"></span>
-<span class="source-line-no">1105</span><span id="line-1105">      // convert to protobuf</span>
-<span class="source-line-no">1106</span><span id="line-1106">      for (SnapshotDescription snapshot : snapshots) {</span>
-<span class="source-line-no">1107</span><span id="line-1107">        builder.addSnapshots(snapshot);</span>
-<span class="source-line-no">1108</span><span id="line-1108">      }</span>
-<span class="source-line-no">1109</span><span id="line-1109">      return builder.build();</span>
-<span class="source-line-no">1110</span><span id="line-1110">    } catch (IOException e) {</span>
-<span class="source-line-no">1111</span><span id="line-1111">      throw new ServiceException(e);</span>
-<span class="source-line-no">1112</span><span id="line-1112">    }</span>
-<span class="source-line-no">1113</span><span id="line-1113">  }</span>
-<span class="source-line-no">1114</span><span id="line-1114"></span>
-<span class="source-line-no">1115</span><span id="line-1115">  @Override</span>
-<span class="source-line-no">1116</span><span id="line-1116">  public ListNamespacesResponse listNamespaces(RpcController controller,</span>
-<span class="source-line-no">1117</span><span id="line-1117">    ListNamespacesRequest request) throws ServiceException {</span>
-<span class="source-line-no">1118</span><span id="line-1118">    try {</span>
-<span class="source-line-no">1119</span><span id="line-1119">      return ListNamespacesResponse.newBuilder().addAllNamespaceName(server.listNamespaces())</span>
-<span class="source-line-no">1120</span><span id="line-1120">        .build();</span>
-<span class="source-line-no">1121</span><span id="line-1121">    } catch (IOException e) {</span>
-<span class="source-line-no">1122</span><span id="line-1122">      throw new ServiceException(e);</span>
-<span class="source-line-no">1123</span><span id="line-1123">    }</span>
-<span class="source-line-no">1124</span><span id="line-1124">  }</span>
-<span class="source-line-no">1125</span><span id="line-1125"></span>
-<span class="source-line-no">1126</span><span id="line-1126">  @Override</span>
-<span class="source-line-no">1127</span><span id="line-1127">  public GetNamespaceDescriptorResponse getNamespaceDescriptor(RpcController controller,</span>
-<span class="source-line-no">1128</span><span id="line-1128">    GetNamespaceDescriptorRequest request) throws ServiceException {</span>
-<span class="source-line-no">1129</span><span id="line-1129">    try {</span>
-<span class="source-line-no">1130</span><span id="line-1130">      return GetNamespaceDescriptorResponse.newBuilder()</span>
-<span class="source-line-no">1131</span><span id="line-1131">        .setNamespaceDescriptor(</span>
-<span class="source-line-no">1132</span><span id="line-1132">          ProtobufUtil.toProtoNamespaceDescriptor(server.getNamespace(request.getNamespaceName())))</span>
-<span class="source-line-no">1133</span><span id="line-1133">        .build();</span>
-<span class="source-line-no">1134</span><span id="line-1134">    } catch (IOException e) {</span>
-<span class="source-line-no">1135</span><span id="line-1135">      throw new ServiceException(e);</span>
-<span class="source-line-no">1136</span><span id="line-1136">    }</span>
-<span class="source-line-no">1137</span><span id="line-1137">  }</span>
-<span class="source-line-no">1138</span><span id="line-1138"></span>
-<span class="source-line-no">1139</span><span id="line-1139">  /**</span>
-<span class="source-line-no">1140</span><span id="line-1140">   * Get the number of regions of the table that have been updated by the alter.</span>
-<span class="source-line-no">1141</span><span id="line-1141">   * @return Pair indicating the number of regions updated Pair.getFirst is the regions that are yet</span>
-<span class="source-line-no">1142</span><span id="line-1142">   *         to be updated Pair.getSecond is the total number of regions of the table</span>
-<span class="source-line-no">1143</span><span id="line-1143">   */</span>
-<span class="source-line-no">1144</span><span id="line-1144">  @Override</span>
-<span class="source-line-no">1145</span><span id="line-1145">  public GetSchemaAlterStatusResponse getSchemaAlterStatus(RpcController controller,</span>
-<span class="source-line-no">1146</span><span id="line-1146">    GetSchemaAlterStatusRequest req) throws ServiceException {</span>
-<span class="source-line-no">1147</span><span id="line-1147">    // TODO: currently, we query using the table name on the client side. this</span>
-<span class="source-line-no">1148</span><span id="line-1148">    // may overlap with other table operations or the table operation may</span>
-<span class="source-line-no">1149</span><span id="line-1149">    // have completed before querying this API. We need to refactor to a</span>
-<span class="source-line-no">1150</span><span id="line-1150">    // transaction system in the future to avoid these ambiguities.</span>
-<span class="source-line-no">1151</span><span id="line-1151">    TableName tableName = ProtobufUtil.toTableName(req.getTableName());</span>
-<span class="source-line-no">1152</span><span id="line-1152"></span>
-<span class="source-line-no">1153</span><span id="line-1153">    try {</span>
-<span class="source-line-no">1154</span><span id="line-1154">      server.checkInitialized();</span>
-<span class="source-line-no">1155</span><span id="line-1155">      Pair&lt;Integer, Integer&gt; pair = server.getAssignmentManager().getReopenStatus(tableName);</span>
-<span class="source-line-no">1156</span><span id="line-1156">      GetSchemaAlterStatusResponse.Builder ret = GetSchemaAlterStatusResponse.newBuilder();</span>
-<span class="source-line-no">1157</span><span id="line-1157">      ret.setYetToUpdateRegions(pair.getFirst());</span>
-<span class="source-line-no">1158</span><span id="line-1158">      ret.setTotalRegions(pair.getSecond());</span>
-<span class="source-line-no">1159</span><span id="line-1159">      return ret.build();</span>
-<span class="source-line-no">1160</span><span id="line-1160">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1161</span><span id="line-1161">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1162</span><span id="line-1162">    }</span>
-<span class="source-line-no">1163</span><span id="line-1163">  }</span>
-<span class="source-line-no">1164</span><span id="line-1164"></span>
-<span class="source-line-no">1165</span><span id="line-1165">  /**</span>
-<span class="source-line-no">1166</span><span id="line-1166">   * Get list of TableDescriptors for requested tables.</span>
-<span class="source-line-no">1167</span><span id="line-1167">   * @param c   Unused (set to null).</span>
-<span class="source-line-no">1168</span><span id="line-1168">   * @param req GetTableDescriptorsRequest that contains: - tableNames: requested tables, or if</span>
-<span class="source-line-no">1169</span><span id="line-1169">   *            empty, all are requested.</span>
-<span class="source-line-no">1170</span><span id="line-1170">   */</span>
-<span class="source-line-no">1171</span><span id="line-1171">  @Override</span>
-<span class="source-line-no">1172</span><span id="line-1172">  public GetTableDescriptorsResponse getTableDescriptors(RpcController c,</span>
-<span class="source-line-no">1173</span><span id="line-1173">    GetTableDescriptorsRequest req) throws ServiceException {</span>
-<span class="source-line-no">1174</span><span id="line-1174">    try {</span>
-<span class="source-line-no">1175</span><span id="line-1175">      server.checkInitialized();</span>
-<span class="source-line-no">1176</span><span id="line-1176"></span>
-<span class="source-line-no">1177</span><span id="line-1177">      final String regex = req.hasRegex() ? req.getRegex() : null;</span>
-<span class="source-line-no">1178</span><span id="line-1178">      final String namespace = req.hasNamespace() ? req.getNamespace() : null;</span>
-<span class="source-line-no">1179</span><span id="line-1179">      List&lt;TableName&gt; tableNameList = null;</span>
-<span class="source-line-no">1180</span><span id="line-1180">      if (req.getTableNamesCount() &gt; 0) {</span>
-<span class="source-line-no">1181</span><span id="line-1181">        tableNameList = new ArrayList&lt;TableName&gt;(req.getTableNamesCount());</span>
-<span class="source-line-no">1182</span><span id="line-1182">        for (HBaseProtos.TableName tableNamePB : req.getTableNamesList()) {</span>
-<span class="source-line-no">1183</span><span id="line-1183">          tableNameList.add(ProtobufUtil.toTableName(tableNamePB));</span>
-<span class="source-line-no">1184</span><span id="line-1184">        }</span>
-<span class="source-line-no">1185</span><span id="line-1185">      }</span>
-<span class="source-line-no">1186</span><span id="line-1186"></span>
-<span class="source-line-no">1187</span><span id="line-1187">      List&lt;TableDescriptor&gt; descriptors =</span>
-<span class="source-line-no">1188</span><span id="line-1188">        server.listTableDescriptors(namespace, regex, tableNameList, req.getIncludeSysTables());</span>
-<span class="source-line-no">1189</span><span id="line-1189"></span>
-<span class="source-line-no">1190</span><span id="line-1190">      GetTableDescriptorsResponse.Builder builder = GetTableDescriptorsResponse.newBuilder();</span>
-<span class="source-line-no">1191</span><span id="line-1191">      if (descriptors != null &amp;&amp; descriptors.size() &gt; 0) {</span>
-<span class="source-line-no">1192</span><span id="line-1192">        // Add the table descriptors to the response</span>
-<span class="source-line-no">1193</span><span id="line-1193">        for (TableDescriptor htd : descriptors) {</span>
-<span class="source-line-no">1194</span><span id="line-1194">          builder.addTableSchema(ProtobufUtil.toTableSchema(htd));</span>
-<span class="source-line-no">1195</span><span id="line-1195">        }</span>
-<span class="source-line-no">1196</span><span id="line-1196">      }</span>
-<span class="source-line-no">1197</span><span id="line-1197">      return builder.build();</span>
-<span class="source-line-no">1198</span><span id="line-1198">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1199</span><span id="line-1199">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1200</span><span id="line-1200">    }</span>
-<span class="source-line-no">1201</span><span id="line-1201">  }</span>
-<span class="source-line-no">1202</span><span id="line-1202"></span>
-<span class="source-line-no">1203</span><span id="line-1203">  @Override</span>
-<span class="source-line-no">1204</span><span id="line-1204">  public ListTableDescriptorsByStateResponse listTableDescriptorsByState(RpcController controller,</span>
-<span class="source-line-no">1205</span><span id="line-1205">    ListTableDescriptorsByStateRequest request) throws ServiceException {</span>
-<span class="source-line-no">1206</span><span id="line-1206">    try {</span>
-<span class="source-line-no">1207</span><span id="line-1207">      server.checkInitialized();</span>
-<span class="source-line-no">1208</span><span id="line-1208">      List&lt;TableDescriptor&gt; descriptors = server.listTableDescriptors(null, null, null, false);</span>
-<span class="source-line-no">1209</span><span id="line-1209"></span>
-<span class="source-line-no">1210</span><span id="line-1210">      ListTableDescriptorsByStateResponse.Builder builder =</span>
-<span class="source-line-no">1211</span><span id="line-1211">        ListTableDescriptorsByStateResponse.newBuilder();</span>
-<span class="source-line-no">1212</span><span id="line-1212">      if (descriptors != null &amp;&amp; descriptors.size() &gt; 0) {</span>
-<span class="source-line-no">1213</span><span id="line-1213">        // Add the table descriptors to the response</span>
-<span class="source-line-no">1214</span><span id="line-1214">        TableState.State state =</span>
-<span class="source-line-no">1215</span><span id="line-1215">          request.getIsEnabled() ? TableState.State.ENABLED : TableState.State.DISABLED;</span>
-<span class="source-line-no">1216</span><span id="line-1216">        for (TableDescriptor htd : descriptors) {</span>
-<span class="source-line-no">1217</span><span id="line-1217">          if (server.getTableStateManager().isTableState(htd.getTableName(), state)) {</span>
-<span class="source-line-no">1218</span><span id="line-1218">            builder.addTableSchema(ProtobufUtil.toTableSchema(htd));</span>
-<span class="source-line-no">1219</span><span id="line-1219">          }</span>
-<span class="source-line-no">1220</span><span id="line-1220">        }</span>
-<span class="source-line-no">1221</span><span id="line-1221">      }</span>
-<span class="source-line-no">1222</span><span id="line-1222">      return builder.build();</span>
-<span class="source-line-no">1223</span><span id="line-1223">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1224</span><span id="line-1224">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1225</span><span id="line-1225">    }</span>
-<span class="source-line-no">1226</span><span id="line-1226">  }</span>
-<span class="source-line-no">1227</span><span id="line-1227"></span>
-<span class="source-line-no">1228</span><span id="line-1228">  /**</span>
-<span class="source-line-no">1229</span><span id="line-1229">   * Get list of userspace table names</span>
-<span class="source-line-no">1230</span><span id="line-1230">   * @param controller Unused (set to null).</span>
-<span class="source-line-no">1231</span><span id="line-1231">   * @param req        GetTableNamesRequest</span>
-<span class="source-line-no">1232</span><span id="line-1232">   */</span>
-<span class="source-line-no">1233</span><span id="line-1233">  @Override</span>
-<span class="source-line-no">1234</span><span id="line-1234">  public GetTableNamesResponse getTableNames(RpcController controller, GetTableNamesRequest req)</span>
-<span class="source-line-no">1235</span><span id="line-1235">    throws ServiceException {</span>
-<span class="source-line-no">1236</span><span id="line-1236">    try {</span>
-<span class="source-line-no">1237</span><span id="line-1237">      server.checkServiceStarted();</span>
-<span class="source-line-no">1238</span><span id="line-1238"></span>
-<span class="source-line-no">1239</span><span id="line-1239">      final String regex = req.hasRegex() ? req.getRegex() : null;</span>
-<span class="source-line-no">1240</span><span id="line-1240">      final String namespace = req.hasNamespace() ? req.getNamespace() : null;</span>
-<span class="source-line-no">1241</span><span id="line-1241">      List&lt;TableName&gt; tableNames =</span>
-<span class="source-line-no">1242</span><span id="line-1242">        server.listTableNames(namespace, regex, req.getIncludeSysTables());</span>
-<span class="source-line-no">1243</span><span id="line-1243"></span>
-<span class="source-line-no">1244</span><span id="line-1244">      GetTableNamesResponse.Builder builder = GetTableNamesResponse.newBuilder();</span>
-<span class="source-line-no">1245</span><span id="line-1245">      if (tableNames != null &amp;&amp; tableNames.size() &gt; 0) {</span>
-<span class="source-line-no">1246</span><span id="line-1246">        // Add the table names to the response</span>
-<span class="source-line-no">1247</span><span id="line-1247">        for (TableName table : tableNames) {</span>
-<span class="source-line-no">1248</span><span id="line-1248">          builder.addTableNames(ProtobufUtil.toProtoTableName(table));</span>
-<span class="source-line-no">1249</span><span id="line-1249">        }</span>
-<span class="source-line-no">1250</span><span id="line-1250">      }</span>
-<span class="source-line-no">1251</span><span id="line-1251">      return builder.build();</span>
-<span class="source-line-no">1252</span><span id="line-1252">    } catch (IOException e) {</span>
-<span class="source-line-no">1253</span><span id="line-1253">      throw new ServiceException(e);</span>
-<span class="source-line-no">1254</span><span id="line-1254">    }</span>
-<span class="source-line-no">1255</span><span id="line-1255">  }</span>
-<span class="source-line-no">1256</span><span id="line-1256"></span>
-<span class="source-line-no">1257</span><span id="line-1257">  @Override</span>
-<span class="source-line-no">1258</span><span id="line-1258">  public ListTableNamesByStateResponse listTableNamesByState(RpcController controller,</span>
-<span class="source-line-no">1259</span><span id="line-1259">    ListTableNamesByStateRequest request) throws ServiceException {</span>
-<span class="source-line-no">1260</span><span id="line-1260">    try {</span>
-<span class="source-line-no">1261</span><span id="line-1261">      server.checkServiceStarted();</span>
-<span class="source-line-no">1262</span><span id="line-1262">      List&lt;TableName&gt; tableNames = server.listTableNames(null, null, false);</span>
-<span class="source-line-no">1263</span><span id="line-1263">      ListTableNamesByStateResponse.Builder builder = ListTableNamesByStateResponse.newBuilder();</span>
-<span class="source-line-no">1264</span><span id="line-1264">      if (tableNames != null &amp;&amp; tableNames.size() &gt; 0) {</span>
-<span class="source-line-no">1265</span><span id="line-1265">        // Add the disabled table names to the response</span>
-<span class="source-line-no">1266</span><span id="line-1266">        TableState.State state =</span>
-<span class="source-line-no">1267</span><span id="line-1267">          request.getIsEnabled() ? TableState.State.ENABLED : TableState.State.DISABLED;</span>
-<span class="source-line-no">1268</span><span id="line-1268">        for (TableName table : tableNames) {</span>
-<span class="source-line-no">1269</span><span id="line-1269">          if (server.getTableStateManager().isTableState(table, state)) {</span>
-<span class="source-line-no">1270</span><span id="line-1270">            builder.addTableNames(ProtobufUtil.toProtoTableName(table));</span>
-<span class="source-line-no">1271</span><span id="line-1271">          }</span>
-<span class="source-line-no">1272</span><span id="line-1272">        }</span>
-<span class="source-line-no">1273</span><span id="line-1273">      }</span>
-<span class="source-line-no">1274</span><span id="line-1274">      return builder.build();</span>
-<span class="source-line-no">1275</span><span id="line-1275">    } catch (IOException e) {</span>
-<span class="source-line-no">1276</span><span id="line-1276">      throw new ServiceException(e);</span>
-<span class="source-line-no">1277</span><span id="line-1277">    }</span>
-<span class="source-line-no">1278</span><span id="line-1278">  }</span>
-<span class="source-line-no">1279</span><span id="line-1279"></span>
-<span class="source-line-no">1280</span><span id="line-1280">  @Override</span>
-<span class="source-line-no">1281</span><span id="line-1281">  public GetTableStateResponse getTableState(RpcController controller, GetTableStateRequest request)</span>
-<span class="source-line-no">1282</span><span id="line-1282">    throws ServiceException {</span>
-<span class="source-line-no">1283</span><span id="line-1283">    try {</span>
-<span class="source-line-no">1284</span><span id="line-1284">      server.checkServiceStarted();</span>
-<span class="source-line-no">1285</span><span id="line-1285">      TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span>
-<span class="source-line-no">1286</span><span id="line-1286">      TableState ts = server.getTableStateManager().getTableState(tableName);</span>
-<span class="source-line-no">1287</span><span id="line-1287">      GetTableStateResponse.Builder builder = GetTableStateResponse.newBuilder();</span>
-<span class="source-line-no">1288</span><span id="line-1288">      builder.setTableState(ts.convert());</span>
-<span class="source-line-no">1289</span><span id="line-1289">      return builder.build();</span>
-<span class="source-line-no">1290</span><span id="line-1290">    } catch (IOException e) {</span>
-<span class="source-line-no">1291</span><span id="line-1291">      throw new ServiceException(e);</span>
-<span class="source-line-no">1292</span><span id="line-1292">    }</span>
-<span class="source-line-no">1293</span><span id="line-1293">  }</span>
-<span class="source-line-no">1294</span><span id="line-1294"></span>
-<span class="source-line-no">1295</span><span id="line-1295">  @Override</span>
-<span class="source-line-no">1296</span><span id="line-1296">  public IsCatalogJanitorEnabledResponse isCatalogJanitorEnabled(RpcController c,</span>
-<span class="source-line-no">1297</span><span id="line-1297">    IsCatalogJanitorEnabledRequest req) throws ServiceException {</span>
-<span class="source-line-no">1298</span><span id="line-1298">    return IsCatalogJanitorEnabledResponse.newBuilder().setValue(server.isCatalogJanitorEnabled())</span>
-<span class="source-line-no">1299</span><span id="line-1299">      .build();</span>
-<span class="source-line-no">1300</span><span id="line-1300">  }</span>
-<span class="source-line-no">1301</span><span id="line-1301"></span>
-<span class="source-line-no">1302</span><span id="line-1302">  @Override</span>
-<span class="source-line-no">1303</span><span id="line-1303">  public IsCleanerChoreEnabledResponse isCleanerChoreEnabled(RpcController c,</span>
-<span class="source-line-no">1304</span><span id="line-1304">    IsCleanerChoreEnabledRequest req) throws ServiceException {</span>
-<span class="source-line-no">1305</span><span id="line-1305">    return IsCleanerChoreEnabledResponse.newBuilder().setValue(server.isCleanerChoreEnabled())</span>
-<span class="source-line-no">1306</span><span id="line-1306">      .build();</span>
-<span class="source-line-no">1307</span><span id="line-1307">  }</span>
-<span class="source-line-no">1308</span><span id="line-1308"></span>
-<span class="source-line-no">1309</span><span id="line-1309">  @Override</span>
-<span class="source-line-no">1310</span><span id="line-1310">  public IsMasterRunningResponse isMasterRunning(RpcController c, IsMasterRunningRequest req)</span>
-<span class="source-line-no">1311</span><span id="line-1311">    throws ServiceException {</span>
-<span class="source-line-no">1312</span><span id="line-1312">    try {</span>
-<span class="source-line-no">1313</span><span id="line-1313">      server.checkServiceStarted();</span>
-<span class="source-line-no">1314</span><span id="line-1314">      return IsMasterRunningResponse.newBuilder().setIsMasterRunning(!server.isStopped()).build();</span>
-<span class="source-line-no">1315</span><span id="line-1315">    } catch (IOException e) {</span>
-<span class="source-line-no">1316</span><span id="line-1316">      throw new ServiceException(e);</span>
-<span class="source-line-no">1317</span><span id="line-1317">    }</span>
-<span class="source-line-no">1318</span><span id="line-1318">  }</span>
-<span class="source-line-no">1319</span><span id="line-1319"></span>
-<span class="source-line-no">1320</span><span id="line-1320">  /**</span>
-<span class="source-line-no">1321</span><span id="line-1321">   * Checks if the specified procedure is done.</span>
-<span class="source-line-no">1322</span><span id="line-1322">   * @return true if the procedure is done, false if the procedure is in the process of completing</span>
-<span class="source-line-no">1323</span><span id="line-1323">   * @throws ServiceException if invalid procedure or failed procedure with progress failure reason.</span>
-<span class="source-line-no">1324</span><span id="line-1324">   */</span>
-<span class="source-line-no">1325</span><span id="line-1325">  @Override</span>
-<span class="source-line-no">1326</span><span id="line-1326">  public IsProcedureDoneResponse isProcedureDone(RpcController controller,</span>
-<span class="source-line-no">1327</span><span id="line-1327">    IsProcedureDoneRequest request) throws ServiceException {</span>
-<span class="source-line-no">1328</span><span id="line-1328">    try {</span>
-<span class="source-line-no">1329</span><span id="line-1329">      server.checkInitialized();</span>
-<span class="source-line-no">1330</span><span id="line-1330">      ProcedureDescription desc = request.getProcedure();</span>
-<span class="source-line-no">1331</span><span id="line-1331">      MasterProcedureManager mpm =</span>
-<span class="source-line-no">1332</span><span id="line-1332">        server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span>
-<span class="source-line-no">1333</span><span id="line-1333">      if (mpm == null) {</span>
-<span class="source-line-no">1334</span><span id="line-1334">        throw new ServiceException("The procedure is not registered: " + desc.getSignature());</span>
-<span class="source-line-no">1335</span><span id="line-1335">      }</span>
-<span class="source-line-no">1336</span><span id="line-1336">      LOG.debug("Checking to see if procedure from request:" + desc.getSignature() + " is done");</span>
-<span class="source-line-no">1337</span><span id="line-1337"></span>
-<span class="source-line-no">1338</span><span id="line-1338">      IsProcedureDoneResponse.Builder builder = IsProcedureDoneResponse.newBuilder();</span>
-<span class="source-line-no">1339</span><span id="line-1339">      boolean done = mpm.isProcedureDone(desc);</span>
-<span class="source-line-no">1340</span><span id="line-1340">      builder.setDone(done);</span>
-<span class="source-line-no">1341</span><span id="line-1341">      return builder.build();</span>
-<span class="source-line-no">1342</span><span id="line-1342">    } catch (ForeignException e) {</span>
-<span class="source-line-no">1343</span><span id="line-1343">      throw new ServiceException(e.getCause());</span>
-<span class="source-line-no">1344</span><span id="line-1344">    } catch (IOException e) {</span>
-<span class="source-line-no">1345</span><span id="line-1345">      throw new ServiceException(e);</span>
-<span class="source-line-no">1346</span><span id="line-1346">    }</span>
-<span class="source-line-no">1347</span><span id="line-1347">  }</span>
-<span class="source-line-no">1348</span><span id="line-1348"></span>
-<span class="source-line-no">1349</span><span id="line-1349">  /**</span>
-<span class="source-line-no">1350</span><span id="line-1350">   * Checks if the specified snapshot is done.</span>
-<span class="source-line-no">1351</span><span id="line-1351">   * @return true if the snapshot is in file system ready to use, false if the snapshot is in the</span>
-<span class="source-line-no">1352</span><span id="line-1352">   *         process of completing</span>
-<span class="source-line-no">1353</span><span id="line-1353">   * @throws ServiceException wrapping UnknownSnapshotException if invalid snapshot, or a wrapped</span>
-<span class="source-line-no">1354</span><span id="line-1354">   *                          HBaseSnapshotException with progress failure reason.</span>
-<span class="source-line-no">1355</span><span id="line-1355">   */</span>
-<span class="source-line-no">1356</span><span id="line-1356">  @Override</span>
-<span class="source-line-no">1357</span><span id="line-1357">  public IsSnapshotDoneResponse isSnapshotDone(RpcController controller,</span>
-<span class="source-line-no">1358</span><span id="line-1358">    IsSnapshotDoneRequest request) throws ServiceException {</span>
-<span class="source-line-no">1359</span><span id="line-1359">    LOG.debug("Checking to see if snapshot from request:"</span>
-<span class="source-line-no">1360</span><span id="line-1360">      + ClientSnapshotDescriptionUtils.toString(request.getSnapshot()) + " is done");</span>
-<span class="source-line-no">1361</span><span id="line-1361">    try {</span>
-<span class="source-line-no">1362</span><span id="line-1362">      server.checkInitialized();</span>
-<span class="source-line-no">1363</span><span id="line-1363">      IsSnapshotDoneResponse.Builder builder = IsSnapshotDoneResponse.newBuilder();</span>
-<span class="source-line-no">1364</span><span id="line-1364">      boolean done = server.snapshotManager.isSnapshotDone(request.getSnapshot());</span>
-<span class="source-line-no">1365</span><span id="line-1365">      builder.setDone(done);</span>
-<span class="source-line-no">1366</span><span id="line-1366">      return builder.build();</span>
-<span class="source-line-no">1367</span><span id="line-1367">    } catch (ForeignException e) {</span>
-<span class="source-line-no">1368</span><span id="line-1368">      throw new ServiceException(e.getCause());</span>
-<span class="source-line-no">1369</span><span id="line-1369">    } catch (IOException e) {</span>
-<span class="source-line-no">1370</span><span id="line-1370">      throw new ServiceException(e);</span>
-<span class="source-line-no">1371</span><span id="line-1371">    }</span>
-<span class="source-line-no">1372</span><span id="line-1372">  }</span>
-<span class="source-line-no">1373</span><span id="line-1373"></span>
-<span class="source-line-no">1374</span><span id="line-1374">  @Override</span>
-<span class="source-line-no">1375</span><span id="line-1375">  public GetProcedureResultResponse getProcedureResult(RpcController controller,</span>
-<span class="source-line-no">1376</span><span id="line-1376">    GetProcedureResultRequest request) throws ServiceException {</span>
-<span class="source-line-no">1377</span><span id="line-1377">    LOG.debug("Checking to see if procedure is done pid=" + request.getProcId());</span>
-<span class="source-line-no">1378</span><span id="line-1378">    try {</span>
-<span class="source-line-no">1379</span><span id="line-1379">      server.checkInitialized();</span>
-<span class="source-line-no">1380</span><span id="line-1380">      GetProcedureResultResponse.Builder builder = GetProcedureResultResponse.newBuilder();</span>
-<span class="source-line-no">1381</span><span id="line-1381">      long procId = request.getProcId();</span>
-<span class="source-line-no">1382</span><span id="line-1382">      ProcedureExecutor&lt;?&gt; executor = server.getMasterProcedureExecutor();</span>
-<span class="source-line-no">1383</span><span id="line-1383">      Procedure&lt;?&gt; result = executor.getResultOrProcedure(procId);</span>
-<span class="source-line-no">1384</span><span id="line-1384">      if (result != null) {</span>
-<span class="source-line-no">1385</span><span id="line-1385">        builder.setSubmittedTime(result.getSubmittedTime());</span>
-<span class="source-line-no">1386</span><span id="line-1386">        builder.setLastUpdate(result.getLastUpdate());</span>
-<span class="source-line-no">1387</span><span id="line-1387">        if (executor.isFinished(procId)) {</span>
-<span class="source-line-no">1388</span><span id="line-1388">          builder.setState(GetProcedureResultResponse.State.FINISHED);</span>
-<span class="source-line-no">1389</span><span id="line-1389">          if (result.isFailed()) {</span>
-<span class="source-line-no">1390</span><span id="line-1390">            IOException exception = MasterProcedureUtil.unwrapRemoteIOException(result);</span>
-<span class="source-line-no">1391</span><span id="line-1391">            builder.setException(ForeignExceptionUtil.toProtoForeignException(exception));</span>
-<span class="source-line-no">1392</span><span id="line-1392">          }</span>
-<span class="source-line-no">1393</span><span id="line-1393">          byte[] resultData = result.getResult();</span>
-<span class="source-line-no">1394</span><span id="line-1394">          if (resultData != null) {</span>
-<span class="source-line-no">1395</span><span id="line-1395">            builder.setResult(UnsafeByteOperations.unsafeWrap(resultData));</span>
-<span class="source-line-no">1396</span><span id="line-1396">          }</span>
-<span class="source-line-no">1397</span><span id="line-1397">          server.getMasterProcedureExecutor().removeResult(request.getProcId());</span>
-<span class="source-line-no">1398</span><span id="line-1398">        } else {</span>
-<span class="source-line-no">1399</span><span id="line-1399">          builder.setState(GetProcedureResultResponse.State.RUNNING);</span>
-<span class="source-line-no">1400</span><span id="line-1400">        }</span>
-<span class="source-line-no">1401</span><span id="line-1401">      } else {</span>
-<span class="source-line-no">1402</span><span id="line-1402">        builder.setState(GetProcedureResultResponse.State.NOT_FOUND);</span>
-<span class="source-line-no">1403</span><span id="line-1403">      }</span>
-<span class="source-line-no">1404</span><span id="line-1404">      return builder.build();</span>
-<span class="source-line-no">1405</span><span id="line-1405">    } catch (IOException e) {</span>
-<span class="source-line-no">1406</span><span id="line-1406">      throw new ServiceException(e);</span>
-<span class="source-line-no">1407</span><span id="line-1407">    }</span>
-<span class="source-line-no">1408</span><span id="line-1408">  }</span>
-<span class="source-line-no">1409</span><span id="line-1409"></span>
-<span class="source-line-no">1410</span><span id="line-1410">  @Override</span>
-<span class="source-line-no">1411</span><span id="line-1411">  public AbortProcedureResponse abortProcedure(RpcController rpcController,</span>
-<span class="source-line-no">1412</span><span id="line-1412">    AbortProcedureRequest request) throws ServiceException {</span>
-<span class="source-line-no">1413</span><span id="line-1413">    try {</span>
-<span class="source-line-no">1414</span><span id="line-1414">      AbortProcedureResponse.Builder response = AbortProcedureResponse.newBuilder();</span>
-<span class="source-line-no">1415</span><span id="line-1415">      boolean abortResult =</span>
-<span class="source-line-no">1416</span><span id="line-1416">        server.abortProcedure(request.getProcId(), request.getMayInterruptIfRunning());</span>
-<span class="source-line-no">1417</span><span id="line-1417">      response.setIsProcedureAborted(abortResult);</span>
-<span class="source-line-no">1418</span><span id="line-1418">      return response.build();</span>
-<span class="source-line-no">1419</span><span id="line-1419">    } catch (IOException e) {</span>
-<span class="source-line-no">1420</span><span id="line-1420">      throw new ServiceException(e);</span>
-<span class="source-line-no">1421</span><span id="line-1421">    }</span>
-<span class="source-line-no">1422</span><span id="line-1422">  }</span>
-<span class="source-line-no">1423</span><span id="line-1423"></span>
-<span class="source-line-no">1424</span><span id="line-1424">  @Override</span>
-<span class="source-line-no">1425</span><span id="line-1425">  public ListNamespaceDescriptorsResponse listNamespaceDescriptors(RpcController c,</span>
-<span class="source-line-no">1426</span><span id="line-1426">    ListNamespaceDescriptorsRequest request) throws ServiceException {</span>
-<span class="source-line-no">1427</span><span id="line-1427">    try {</span>
-<span class="source-line-no">1428</span><span id="line-1428">      ListNamespaceDescriptorsResponse.Builder response =</span>
-<span class="source-line-no">1429</span><span id="line-1429">        ListNamespaceDescriptorsResponse.newBuilder();</span>
-<span class="source-line-no">1430</span><span id="line-1430">      for (NamespaceDescriptor ns : server.getNamespaces()) {</span>
-<span class="source-line-no">1431</span><span id="line-1431">        response.addNamespaceDescriptor(ProtobufUtil.toProtoNamespaceDescriptor(ns));</span>
-<span class="source-line-no">1432</span><span id="line-1432">      }</span>
-<span class="source-line-no">1433</span><span id="line-1433">      return response.build();</span>
-<span class="source-line-no">1434</span><span id="line-1434">    } catch (IOException e) {</span>
-<span class="source-line-no">1435</span><span id="line-1435">      throw new ServiceException(e);</span>
-<span class="source-line-no">1436</span><span id="line-1436">    }</span>
-<span class="source-line-no">1437</span><span id="line-1437">  }</span>
-<span class="source-line-no">1438</span><span id="line-1438"></span>
-<span class="source-line-no">1439</span><span id="line-1439">  @Override</span>
-<span class="source-line-no">1440</span><span id="line-1440">  public GetProceduresResponse getProcedures(RpcController rpcController,</span>
-<span class="source-line-no">1441</span><span id="line-1441">    GetProceduresRequest request) throws ServiceException {</span>
-<span class="source-line-no">1442</span><span id="line-1442">    try {</span>
-<span class="source-line-no">1443</span><span id="line-1443">      final GetProceduresResponse.Builder response = GetProceduresResponse.newBuilder();</span>
-<span class="source-line-no">1444</span><span id="line-1444">      for (Procedure&lt;?&gt; p : server.getProcedures()) {</span>
-<span class="source-line-no">1445</span><span id="line-1445">        response.addProcedure(ProcedureUtil.convertToProtoProcedure(p));</span>
-<span class="source-line-no">1446</span><span id="line-1446">      }</span>
-<span class="source-line-no">1447</span><span id="line-1447">      return response.build();</span>
-<span class="source-line-no">1448</span><span id="line-1448">    } catch (IOException e) {</span>
-<span class="source-line-no">1449</span><span id="line-1449">      throw new ServiceException(e);</span>
-<span class="source-line-no">1450</span><span id="line-1450">    }</span>
-<span class="source-line-no">1451</span><span id="line-1451">  }</span>
-<span class="source-line-no">1452</span><span id="line-1452"></span>
-<span class="source-line-no">1453</span><span id="line-1453">  @Override</span>
-<span class="source-line-no">1454</span><span id="line-1454">  public GetLocksResponse getLocks(RpcController controller, GetLocksRequest request)</span>
-<span class="source-line-no">1455</span><span id="line-1455">    throws ServiceException {</span>
-<span class="source-line-no">1456</span><span id="line-1456">    try {</span>
-<span class="source-line-no">1457</span><span id="line-1457">      final GetLocksResponse.Builder builder = GetLocksResponse.newBuilder();</span>
-<span class="source-line-no">1458</span><span id="line-1458"></span>
-<span class="source-line-no">1459</span><span id="line-1459">      for (LockedResource lockedResource : server.getLocks()) {</span>
-<span class="source-line-no">1460</span><span id="line-1460">        builder.addLock(ProcedureUtil.convertToProtoLockedResource(lockedResource));</span>
-<span class="source-line-no">1461</span><span id="line-1461">      }</span>
-<span class="source-line-no">1462</span><span id="line-1462"></span>
-<span class="source-line-no">1463</span><span id="line-1463">      return builder.build();</span>
-<span class="source-line-no">1464</span><span id="line-1464">    } catch (IOException e) {</span>
-<span class="source-line-no">1465</span><span id="line-1465">      throw new ServiceException(e);</span>
-<span class="source-line-no">1466</span><span id="line-1466">    }</span>
-<span class="source-line-no">1467</span><span id="line-1467">  }</span>
-<span class="source-line-no">1468</span><span id="line-1468"></span>
-<span class="source-line-no">1469</span><span id="line-1469">  @Override</span>
-<span class="source-line-no">1470</span><span id="line-1470">  public ListTableDescriptorsByNamespaceResponse listTableDescriptorsByNamespace(RpcController c,</span>
-<span class="source-line-no">1471</span><span id="line-1471">    ListTableDescriptorsByNamespaceRequest request) throws ServiceException {</span>
-<span class="source-line-no">1472</span><span id="line-1472">    try {</span>
-<span class="source-line-no">1473</span><span id="line-1473">      ListTableDescriptorsByNamespaceResponse.Builder b =</span>
-<span class="source-line-no">1474</span><span id="line-1474">        ListTableDescriptorsByNamespaceResponse.newBuilder();</span>
-<span class="source-line-no">1475</span><span id="line-1475">      for (TableDescriptor htd : server</span>
-<span class="source-line-no">1476</span><span id="line-1476">        .listTableDescriptorsByNamespace(request.getNamespaceName())) {</span>
-<span class="source-line-no">1477</span><span id="line-1477">        b.addTableSchema(ProtobufUtil.toTableSchema(htd));</span>
-<span class="source-line-no">1478</span><span id="line-1478">      }</span>
-<span class="source-line-no">1479</span><span id="line-1479">      return b.build();</span>
-<span class="source-line-no">1480</span><span id="line-1480">    } catch (IOException e) {</span>
-<span class="source-line-no">1481</span><span id="line-1481">      throw new ServiceException(e);</span>
-<span class="source-line-no">1482</span><span id="line-1482">    }</span>
-<span class="source-line-no">1483</span><span id="line-1483">  }</span>
-<span class="source-line-no">1484</span><span id="line-1484"></span>
-<span class="source-line-no">1485</span><span id="line-1485">  @Override</span>
-<span class="source-line-no">1486</span><span id="line-1486">  public ListTableNamesByNamespaceResponse listTableNamesByNamespace(RpcController c,</span>
-<span class="source-line-no">1487</span><span id="line-1487">    ListTableNamesByNamespaceRequest request) throws ServiceException {</span>
-<span class="source-line-no">1488</span><span id="line-1488">    try {</span>
-<span class="source-line-no">1489</span><span id="line-1489">      ListTableNamesByNamespaceResponse.Builder b = ListTableNamesByNamespaceResponse.newBuilder();</span>
-<span class="source-line-no">1490</span><span id="line-1490">      for (TableName tableName : server.listTableNamesByNamespace(request.getNamespaceName())) {</span>
-<span class="source-line-no">1491</span><span id="line-1491">        b.addTableName(ProtobufUtil.toProtoTableName(tableName));</span>
-<span class="source-line-no">1492</span><span id="line-1492">      }</span>
-<span class="source-line-no">1493</span><span id="line-1493">      return b.build();</span>
-<span class="source-line-no">1494</span><span id="line-1494">    } catch (IOException e) {</span>
-<span class="source-line-no">1495</span><span id="line-1495">      throw new ServiceException(e);</span>
-<span class="source-line-no">1496</span><span id="line-1496">    }</span>
-<span class="source-line-no">1497</span><span id="line-1497">  }</span>
-<span class="source-line-no">1498</span><span id="line-1498"></span>
-<span class="source-line-no">1499</span><span id="line-1499">  @Override</span>
-<span class="source-line-no">1500</span><span id="line-1500">  public ModifyColumnResponse modifyColumn(RpcController controller, ModifyColumnRequest req)</span>
-<span class="source-line-no">1501</span><span id="line-1501">    throws ServiceException {</span>
-<span class="source-line-no">1502</span><span id="line-1502">    try {</span>
-<span class="source-line-no">1503</span><span id="line-1503">      long procId = server.modifyColumn(ProtobufUtil.toTableName(req.getTableName()),</span>
-<span class="source-line-no">1504</span><span id="line-1504">        ProtobufUtil.toColumnFamilyDescriptor(req.getColumnFamilies()), req.getNonceGroup(),</span>
-<span class="source-line-no">1505</span><span id="line-1505">        req.getNonce());</span>
-<span class="source-line-no">1506</span><span id="line-1506">      if (procId == -1) {</span>
-<span class="source-line-no">1507</span><span id="line-1507">        // This mean operation was not performed in server, so do not set any procId</span>
-<span class="source-line-no">1508</span><span id="line-1508">        return ModifyColumnResponse.newBuilder().build();</span>
-<span class="source-line-no">1509</span><span id="line-1509">      } else {</span>
-<span class="source-line-no">1510</span><span id="line-1510">        return ModifyColumnResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">1511</span><span id="line-1511">      }</span>
-<span class="source-line-no">1512</span><span id="line-1512">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1513</span><span id="line-1513">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1514</span><span id="line-1514">    }</span>
-<span class="source-line-no">1515</span><span id="line-1515">  }</span>
-<span class="source-line-no">1516</span><span id="line-1516"></span>
-<span class="source-line-no">1517</span><span id="line-1517">  @Override</span>
-<span class="source-line-no">1518</span><span id="line-1518">  public ModifyColumnStoreFileTrackerResponse modifyColumnStoreFileTracker(RpcController controller,</span>
-<span class="source-line-no">1519</span><span id="line-1519">    ModifyColumnStoreFileTrackerRequest req) throws ServiceException {</span>
-<span class="source-line-no">1520</span><span id="line-1520">    try {</span>
-<span class="source-line-no">1521</span><span id="line-1521">      long procId =</span>
-<span class="source-line-no">1522</span><span id="line-1522">        server.modifyColumnStoreFileTracker(ProtobufUtil.toTableName(req.getTableName()),</span>
-<span class="source-line-no">1523</span><span id="line-1523">          req.getFamily().toByteArray(), req.getDstSft(), req.getNonceGroup(), req.getNonce());</span>
-<span class="source-line-no">1524</span><span id="line-1524">      return ModifyColumnStoreFileTrackerResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">1525</span><span id="line-1525">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1526</span><span id="line-1526">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1527</span><span id="line-1527">    }</span>
-<span class="source-line-no">1528</span><span id="line-1528">  }</span>
-<span class="source-line-no">1529</span><span id="line-1529"></span>
-<span class="source-line-no">1530</span><span id="line-1530">  @Override</span>
-<span class="source-line-no">1531</span><span id="line-1531">  public ModifyNamespaceResponse modifyNamespace(RpcController controller,</span>
-<span class="source-line-no">1532</span><span id="line-1532">    ModifyNamespaceRequest request) throws ServiceException {</span>
-<span class="source-line-no">1533</span><span id="line-1533">    try {</span>
-<span class="source-line-no">1534</span><span id="line-1534">      long procId =</span>
-<span class="source-line-no">1535</span><span id="line-1535">        server.modifyNamespace(ProtobufUtil.toNamespaceDescriptor(request.getNamespaceDescriptor()),</span>
-<span class="source-line-no">1536</span><span id="line-1536">          request.getNonceGroup(), request.getNonce());</span>
-<span class="source-line-no">1537</span><span id="line-1537">      return ModifyNamespaceResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">1538</span><span id="line-1538">    } catch (IOException e) {</span>
-<span class="source-line-no">1539</span><span id="line-1539">      throw new ServiceException(e);</span>
-<span class="source-line-no">1540</span><span id="line-1540">    }</span>
-<span class="source-line-no">1541</span><span id="line-1541">  }</span>
-<span class="source-line-no">1542</span><span id="line-1542"></span>
-<span class="source-line-no">1543</span><span id="line-1543">  @Override</span>
-<span class="source-line-no">1544</span><span id="line-1544">  public ModifyTableResponse modifyTable(RpcController controller, ModifyTableRequest req)</span>
-<span class="source-line-no">1545</span><span id="line-1545">    throws ServiceException {</span>
-<span class="source-line-no">1546</span><span id="line-1546">    try {</span>
-<span class="source-line-no">1547</span><span id="line-1547">      long procId = server.modifyTable(ProtobufUtil.toTableName(req.getTableName()),</span>
-<span class="source-line-no">1548</span><span id="line-1548">        ProtobufUtil.toTableDescriptor(req.getTableSchema()), req.getNonceGroup(), req.getNonce(),</span>
-<span class="source-line-no">1549</span><span id="line-1549">        req.getReopenRegions());</span>
-<span class="source-line-no">1550</span><span id="line-1550">      return ModifyTableResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">1551</span><span id="line-1551">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1552</span><span id="line-1552">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1553</span><span id="line-1553">    }</span>
-<span class="source-line-no">1554</span><span id="line-1554">  }</span>
-<span class="source-line-no">1555</span><span id="line-1555"></span>
-<span class="source-line-no">1556</span><span id="line-1556">  @Override</span>
-<span class="source-line-no">1557</span><span id="line-1557">  public ModifyTableStoreFileTrackerResponse modifyTableStoreFileTracker(RpcController controller,</span>
-<span class="source-line-no">1558</span><span id="line-1558">    ModifyTableStoreFileTrackerRequest req) throws ServiceException {</span>
-<span class="source-line-no">1559</span><span id="line-1559">    try {</span>
-<span class="source-line-no">1560</span><span id="line-1560">      long procId = server.modifyTableStoreFileTracker(ProtobufUtil.toTableName(req.getTableName()),</span>
-<span class="source-line-no">1561</span><span id="line-1561">        req.getDstSft(), req.getNonceGroup(), req.getNonce());</span>
-<span class="source-line-no">1562</span><span id="line-1562">      return ModifyTableStoreFileTrackerResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">1563</span><span id="line-1563">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1564</span><span id="line-1564">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1565</span><span id="line-1565">    }</span>
-<span class="source-line-no">1566</span><span id="line-1566">  }</span>
-<span class="source-line-no">1567</span><span id="line-1567"></span>
-<span class="source-line-no">1568</span><span id="line-1568">  @Override</span>
-<span class="source-line-no">1569</span><span id="line-1569">  public MoveRegionResponse moveRegion(RpcController controller, MoveRegionRequest req)</span>
-<span class="source-line-no">1570</span><span id="line-1570">    throws ServiceException {</span>
-<span class="source-line-no">1571</span><span id="line-1571">    final byte[] encodedRegionName = req.getRegion().getValue().toByteArray();</span>
-<span class="source-line-no">1572</span><span id="line-1572">    RegionSpecifierType type = req.getRegion().getType();</span>
-<span class="source-line-no">1573</span><span id="line-1573">    final byte[] destServerName = (req.hasDestServerName())</span>
-<span class="source-line-no">1574</span><span id="line-1574">      ? Bytes.toBytes(ProtobufUtil.toServerName(req.getDestServerName()).getServerName())</span>
-<span class="source-line-no">1575</span><span id="line-1575">      : null;</span>
-<span class="source-line-no">1576</span><span id="line-1576">    MoveRegionResponse mrr = MoveRegionResponse.newBuilder().build();</span>
-<span class="source-line-no">1577</span><span id="line-1577"></span>
-<span class="source-line-no">1578</span><span id="line-1578">    if (type != RegionSpecifierType.ENCODED_REGION_NAME) {</span>
-<span class="source-line-no">1579</span><span id="line-1579">      LOG.warn("moveRegion specifier type: expected: " + RegionSpecifierType.ENCODED_REGION_NAME</span>
-<span class="source-line-no">1580</span><span id="line-1580">        + " actual: " + type);</span>
-<span class="source-line-no">1581</span><span id="line-1581">    }</span>
-<span class="source-line-no">1582</span><span id="line-1582"></span>
-<span class="source-line-no">1583</span><span id="line-1583">    try {</span>
-<span class="source-line-no">1584</span><span id="line-1584">      server.checkInitialized();</span>
-<span class="source-line-no">1585</span><span id="line-1585">      server.move(encodedRegionName, destServerName);</span>
-<span class="source-line-no">1586</span><span id="line-1586">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1587</span><span id="line-1587">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1588</span><span id="line-1588">    }</span>
-<span class="source-line-no">1589</span><span id="line-1589">    return mrr;</span>
-<span class="source-line-no">1590</span><span id="line-1590">  }</span>
-<span class="source-line-no">1591</span><span id="line-1591"></span>
-<span class="source-line-no">1592</span><span id="line-1592">  /**</span>
-<span class="source-line-no">1593</span><span id="line-1593">   * Offline specified region from master's in-memory state. It will not attempt to reassign the</span>
-<span class="source-line-no">1594</span><span id="line-1594">   * region as in unassign. This is a special method that should be used by experts or hbck.</span>
-<span class="source-line-no">1595</span><span id="line-1595">   */</span>
-<span class="source-line-no">1596</span><span id="line-1596">  @Override</span>
-<span class="source-line-no">1597</span><span id="line-1597">  public OfflineRegionResponse offlineRegion(RpcController controller, OfflineRegionRequest request)</span>
-<span class="source-line-no">1598</span><span id="line-1598">    throws ServiceException {</span>
-<span class="source-line-no">1599</span><span id="line-1599">    try {</span>
-<span class="source-line-no">1600</span><span id="line-1600">      server.checkInitialized();</span>
-<span class="source-line-no">1601</span><span id="line-1601"></span>
-<span class="source-line-no">1602</span><span id="line-1602">      final RegionSpecifierType type = request.getRegion().getType();</span>
-<span class="source-line-no">1603</span><span id="line-1603">      if (type != RegionSpecifierType.REGION_NAME) {</span>
-<span class="source-line-no">1604</span><span id="line-1604">        LOG.warn("moveRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span>
-<span class="source-line-no">1605</span><span id="line-1605">          + " actual: " + type);</span>
-<span class="source-line-no">1606</span><span id="line-1606">      }</span>
-<span class="source-line-no">1607</span><span id="line-1607"></span>
-<span class="source-line-no">1608</span><span id="line-1608">      final byte[] regionName = request.getRegion().getValue().toByteArray();</span>
-<span class="source-line-no">1609</span><span id="line-1609">      final RegionInfo hri = server.getAssignmentManager().getRegionInfo(regionName);</span>
-<span class="source-line-no">1610</span><span id="line-1610">      if (hri == null) {</span>
-<span class="source-line-no">1611</span><span id="line-1611">        throw new UnknownRegionException(Bytes.toStringBinary(regionName));</span>
-<span class="source-line-no">1612</span><span id="line-1612">      }</span>
-<span class="source-line-no">1613</span><span id="line-1613"></span>
-<span class="source-line-no">1614</span><span id="line-1614">      if (server.cpHost != null) {</span>
-<span class="source-line-no">1615</span><span id="line-1615">        server.cpHost.preRegionOffline(hri);</span>
-<span class="source-line-no">1616</span><span id="line-1616">      }</span>
-<span class="source-line-no">1617</span><span id="line-1617">      LOG.info(server.getClientIdAuditPrefix() + " offline " + hri.getRegionNameAsString());</span>
-<span class="source-line-no">1618</span><span id="line-1618">      server.getAssignmentManager().offlineRegion(hri);</span>
-<span class="source-line-no">1619</span><span id="line-1619">      if (server.cpHost != null) {</span>
-<span class="source-line-no">1620</span><span id="line-1620">        server.cpHost.postRegionOffline(hri);</span>
-<span class="source-line-no">1621</span><span id="line-1621">      }</span>
-<span class="source-line-no">1622</span><span id="line-1622">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1623</span><span id="line-1623">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1624</span><span id="line-1624">    }</span>
-<span class="source-line-no">1625</span><span id="line-1625">    return OfflineRegionResponse.newBuilder().build();</span>
-<span class="source-line-no">1626</span><span id="line-1626">  }</span>
-<span class="source-line-no">1627</span><span id="line-1627"></span>
-<span class="source-line-no">1628</span><span id="line-1628">  /**</span>
-<span class="source-line-no">1629</span><span id="line-1629">   * Execute Restore/Clone snapshot operation.</span>
-<span class="source-line-no">1630</span><span id="line-1630">   * &lt;p&gt;</span>
-<span class="source-line-no">1631</span><span id="line-1631">   * If the specified table exists a "Restore" is executed, replacing the table schema and directory</span>
-<span class="source-line-no">1632</span><span id="line-1632">   * data with the content of the snapshot. The table must be disabled, or a</span>
-<span class="source-line-no">1633</span><span id="line-1633">   * UnsupportedOperationException will be thrown.</span>
-<span class="source-line-no">1634</span><span id="line-1634">   * &lt;p&gt;</span>
-<span class="source-line-no">1635</span><span id="line-1635">   * If the table doesn't exist a "Clone" is executed, a new table is created using the schema at</span>
-<span class="source-line-no">1636</span><span id="line-1636">   * the time of the snapshot, and the content of the snapshot.</span>
-<span class="source-line-no">1637</span><span id="line-1637">   * &lt;p&gt;</span>
-<span class="source-line-no">1638</span><span id="line-1638">   * The restore/clone operation does not require copying HFiles. Since HFiles are immutable the</span>
-<span class="source-line-no">1639</span><span id="line-1639">   * table can point to and use the same files as the original one.</span>
-<span class="source-line-no">1640</span><span id="line-1640">   */</span>
-<span class="source-line-no">1641</span><span id="line-1641">  @Override</span>
-<span class="source-line-no">1642</span><span id="line-1642">  public RestoreSnapshotResponse restoreSnapshot(RpcController controller,</span>
-<span class="source-line-no">1643</span><span id="line-1643">    RestoreSnapshotRequest request) throws ServiceException {</span>
-<span class="source-line-no">1644</span><span id="line-1644">    try {</span>
-<span class="source-line-no">1645</span><span id="line-1645">      long procId = server.restoreSnapshot(request.getSnapshot(), request.getNonceGroup(),</span>
-<span class="source-line-no">1646</span><span id="line-1646">        request.getNonce(), request.getRestoreACL(), request.getCustomSFT());</span>
-<span class="source-line-no">1647</span><span id="line-1647">      return RestoreSnapshotResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">1648</span><span id="line-1648">    } catch (ForeignException e) {</span>
-<span class="source-line-no">1649</span><span id="line-1649">      throw new ServiceException(e.getCause());</span>
-<span class="source-line-no">1650</span><span id="line-1650">    } catch (IOException e) {</span>
-<span class="source-line-no">1651</span><span id="line-1651">      throw new ServiceException(e);</span>
-<span class="source-line-no">1652</span><span id="line-1652">    }</span>
-<span class="source-line-no">1653</span><span id="line-1653">  }</span>
-<span class="source-line-no">1654</span><span id="line-1654"></span>
-<span class="source-line-no">1655</span><span id="line-1655">  @Override</span>
-<span class="source-line-no">1656</span><span id="line-1656">  public SetSnapshotCleanupResponse switchSnapshotCleanup(RpcController controller,</span>
-<span class="source-line-no">1657</span><span id="line-1657">    SetSnapshotCleanupRequest request) throws ServiceException {</span>
-<span class="source-line-no">1658</span><span id="line-1658">    try {</span>
-<span class="source-line-no">1659</span><span id="line-1659">      server.checkInitialized();</span>
-<span class="source-line-no">1660</span><span id="line-1660">      final boolean enabled = request.getEnabled();</span>
-<span class="source-line-no">1661</span><span id="line-1661">      final boolean isSynchronous = request.hasSynchronous() &amp;&amp; request.getSynchronous();</span>
-<span class="source-line-no">1662</span><span id="line-1662">      final boolean prevSnapshotCleanupRunning = this.switchSnapshotCleanup(enabled, isSynchronous);</span>
-<span class="source-line-no">1663</span><span id="line-1663">      return SetSnapshotCleanupResponse.newBuilder()</span>
-<span class="source-line-no">1664</span><span id="line-1664">        .setPrevSnapshotCleanup(prevSnapshotCleanupRunning).build();</span>
-<span class="source-line-no">1665</span><span id="line-1665">    } catch (IOException e) {</span>
-<span class="source-line-no">1666</span><span id="line-1666">      throw new ServiceException(e);</span>
-<span class="source-line-no">1667</span><span id="line-1667">    }</span>
-<span class="source-line-no">1668</span><span id="line-1668">  }</span>
-<span class="source-line-no">1669</span><span id="line-1669"></span>
-<span class="source-line-no">1670</span><span id="line-1670">  @Override</span>
-<span class="source-line-no">1671</span><span id="line-1671">  public IsSnapshotCleanupEnabledResponse isSnapshotCleanupEnabled(RpcController controller,</span>
-<span class="source-line-no">1672</span><span id="line-1672">    IsSnapshotCleanupEnabledRequest request) throws ServiceException {</span>
-<span class="source-line-no">1673</span><span id="line-1673">    try {</span>
-<span class="source-line-no">1674</span><span id="line-1674">      server.checkInitialized();</span>
-<span class="source-line-no">1675</span><span id="line-1675">      final boolean isSnapshotCleanupEnabled = server.snapshotCleanupStateStore.get();</span>
-<span class="source-line-no">1676</span><span id="line-1676">      return IsSnapshotCleanupEnabledResponse.newBuilder().setEnabled(isSnapshotCleanupEnabled)</span>
-<span class="source-line-no">1677</span><span id="line-1677">        .build();</span>
-<span class="source-line-no">1678</span><span id="line-1678">    } catch (IOException e) {</span>
-<span class="source-line-no">1679</span><span id="line-1679">      throw new ServiceException(e);</span>
-<span class="source-line-no">1680</span><span id="line-1680">    }</span>
-<span class="source-line-no">1681</span><span id="line-1681">  }</span>
-<span class="source-line-no">1682</span><span id="line-1682"></span>
-<span class="source-line-no">1683</span><span id="line-1683">  /**</span>
-<span class="source-line-no">1684</span><span id="line-1684">   * Turn on/off snapshot auto-cleanup based on TTL</span>
-<span class="source-line-no">1685</span><span id="line-1685">   * @param enabledNewVal Set to &lt;code&gt;true&lt;/code&gt; to enable, &lt;code&gt;false&lt;/code&gt; to disable</span>
-<span class="source-line-no">1686</span><span id="line-1686">   * @param synchronous   If &lt;code&gt;true&lt;/code&gt;, it waits until current snapshot cleanup is</span>
-<span class="source-line-no">1687</span><span id="line-1687">   *                      completed, if outstanding</span>
-<span class="source-line-no">1688</span><span id="line-1688">   * @return previous snapshot auto-cleanup mode</span>
-<span class="source-line-no">1689</span><span id="line-1689">   */</span>
-<span class="source-line-no">1690</span><span id="line-1690">  private synchronized boolean switchSnapshotCleanup(final boolean enabledNewVal,</span>
-<span class="source-line-no">1691</span><span id="line-1691">    final boolean synchronous) throws IOException {</span>
-<span class="source-line-no">1692</span><span id="line-1692">    final boolean oldValue = server.snapshotCleanupStateStore.get();</span>
-<span class="source-line-no">1693</span><span id="line-1693">    server.switchSnapshotCleanup(enabledNewVal, synchronous);</span>
-<span class="source-line-no">1694</span><span id="line-1694">    LOG.info("{} Successfully set snapshot cleanup to {}", server.getClientIdAuditPrefix(),</span>
-<span class="source-line-no">1695</span><span id="line-1695">      enabledNewVal);</span>
-<span class="source-line-no">1696</span><span id="line-1696">    return oldValue;</span>
-<span class="source-line-no">1697</span><span id="line-1697">  }</span>
-<span class="source-line-no">1698</span><span id="line-1698"></span>
-<span class="source-line-no">1699</span><span id="line-1699">  @Override</span>
-<span class="source-line-no">1700</span><span id="line-1700">  public RunCatalogScanResponse runCatalogScan(RpcController c, RunCatalogScanRequest req)</span>
-<span class="source-line-no">1701</span><span id="line-1701">    throws ServiceException {</span>
-<span class="source-line-no">1702</span><span id="line-1702">    rpcPreCheck("runCatalogScan");</span>
-<span class="source-line-no">1703</span><span id="line-1703">    try {</span>
-<span class="source-line-no">1704</span><span id="line-1704">      return ResponseConverter.buildRunCatalogScanResponse(this.server.catalogJanitorChore.scan());</span>
-<span class="source-line-no">1705</span><span id="line-1705">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1706</span><span id="line-1706">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1707</span><span id="line-1707">    }</span>
-<span class="source-line-no">1708</span><span id="line-1708">  }</span>
-<span class="source-line-no">1709</span><span id="line-1709"></span>
-<span class="source-line-no">1710</span><span id="line-1710">  @Override</span>
-<span class="source-line-no">1711</span><span id="line-1711">  public RunCleanerChoreResponse runCleanerChore(RpcController c, RunCleanerChoreRequest req)</span>
-<span class="source-line-no">1712</span><span id="line-1712">    throws ServiceException {</span>
-<span class="source-line-no">1713</span><span id="line-1713">    rpcPreCheck("runCleanerChore");</span>
-<span class="source-line-no">1714</span><span id="line-1714">    try {</span>
-<span class="source-line-no">1715</span><span id="line-1715">      CompletableFuture&lt;Boolean&gt; fileCleanerFuture = server.getHFileCleaner().triggerCleanerNow();</span>
-<span class="source-line-no">1716</span><span id="line-1716">      CompletableFuture&lt;Boolean&gt; logCleanerFuture = server.getLogCleaner().triggerCleanerNow();</span>
-<span class="source-line-no">1717</span><span id="line-1717">      boolean result = fileCleanerFuture.get() &amp;&amp; logCleanerFuture.get();</span>
-<span class="source-line-no">1718</span><span id="line-1718">      return ResponseConverter.buildRunCleanerChoreResponse(result);</span>
-<span class="source-line-no">1719</span><span id="line-1719">    } catch (InterruptedException e) {</span>
-<span class="source-line-no">1720</span><span id="line-1720">      throw new ServiceException(e);</span>
-<span class="source-line-no">1721</span><span id="line-1721">    } catch (ExecutionException e) {</span>
-<span class="source-line-no">1722</span><span id="line-1722">      throw new ServiceException(e.getCause());</span>
-<span class="source-line-no">1723</span><span id="line-1723">    }</span>
-<span class="source-line-no">1724</span><span id="line-1724">  }</span>
-<span class="source-line-no">1725</span><span id="line-1725"></span>
-<span class="source-line-no">1726</span><span id="line-1726">  @Override</span>
-<span class="source-line-no">1727</span><span id="line-1727">  public SetBalancerRunningResponse setBalancerRunning(RpcController c,</span>
-<span class="source-line-no">1728</span><span id="line-1728">    SetBalancerRunningRequest req) throws ServiceException {</span>
-<span class="source-line-no">1729</span><span id="line-1729">    try {</span>
-<span class="source-line-no">1730</span><span id="line-1730">      server.checkInitialized();</span>
-<span class="source-line-no">1731</span><span id="line-1731">      boolean prevValue = (req.getSynchronous())</span>
-<span class="source-line-no">1732</span><span id="line-1732">        ? synchronousBalanceSwitch(req.getOn())</span>
-<span class="source-line-no">1733</span><span id="line-1733">        : server.balanceSwitch(req.getOn());</span>
-<span class="source-line-no">1734</span><span id="line-1734">      return SetBalancerRunningResponse.newBuilder().setPrevBalanceValue(prevValue).build();</span>
-<span class="source-line-no">1735</span><span id="line-1735">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1736</span><span id="line-1736">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1737</span><span id="line-1737">    }</span>
-<span class="source-line-no">1738</span><span id="line-1738">  }</span>
-<span class="source-line-no">1739</span><span id="line-1739"></span>
-<span class="source-line-no">1740</span><span id="line-1740">  @Override</span>
-<span class="source-line-no">1741</span><span id="line-1741">  public ShutdownResponse shutdown(RpcController controller, ShutdownRequest request)</span>
-<span class="source-line-no">1742</span><span id="line-1742">    throws ServiceException {</span>
-<span class="source-line-no">1743</span><span id="line-1743">    LOG.info(server.getClientIdAuditPrefix() + " shutdown");</span>
-<span class="source-line-no">1744</span><span id="line-1744">    try {</span>
-<span class="source-line-no">1745</span><span id="line-1745">      server.shutdown();</span>
-<span class="source-line-no">1746</span><span id="line-1746">    } catch (IOException e) {</span>
-<span class="source-line-no">1747</span><span id="line-1747">      LOG.error("Exception occurred in HMaster.shutdown()", e);</span>
-<span class="source-line-no">1748</span><span id="line-1748">      throw new ServiceException(e);</span>
-<span class="source-line-no">1749</span><span id="line-1749">    }</span>
-<span class="source-line-no">1750</span><span id="line-1750">    return ShutdownResponse.newBuilder().build();</span>
-<span class="source-line-no">1751</span><span id="line-1751">  }</span>
-<span class="source-line-no">1752</span><span id="line-1752"></span>
-<span class="source-line-no">1753</span><span id="line-1753">  /**</span>
-<span class="source-line-no">1754</span><span id="line-1754">   * Triggers an asynchronous attempt to take a snapshot. {@inheritDoc}</span>
-<span class="source-line-no">1755</span><span id="line-1755">   */</span>
-<span class="source-line-no">1756</span><span id="line-1756">  @Override</span>
-<span class="source-line-no">1757</span><span id="line-1757">  public SnapshotResponse snapshot(RpcController controller, SnapshotRequest request)</span>
-<span class="source-line-no">1758</span><span id="line-1758">    throws ServiceException {</span>
-<span class="source-line-no">1759</span><span id="line-1759">    try {</span>
-<span class="source-line-no">1760</span><span id="line-1760">      server.checkInitialized();</span>
-<span class="source-line-no">1761</span><span id="line-1761">      server.snapshotManager.checkSnapshotSupport();</span>
-<span class="source-line-no">1762</span><span id="line-1762"></span>
-<span class="source-line-no">1763</span><span id="line-1763">      LOG.info(server.getClientIdAuditPrefix() + " snapshot request for:"</span>
-<span class="source-line-no">1764</span><span id="line-1764">        + ClientSnapshotDescriptionUtils.toString(request.getSnapshot()));</span>
-<span class="source-line-no">1765</span><span id="line-1765">      // get the snapshot information</span>
-<span class="source-line-no">1766</span><span id="line-1766">      SnapshotDescription snapshot =</span>
-<span class="source-line-no">1767</span><span id="line-1767">        SnapshotDescriptionUtils.validate(request.getSnapshot(), server.getConfiguration());</span>
-<span class="source-line-no">1768</span><span id="line-1768">      // send back the max amount of time the client should wait for the snapshot to complete</span>
-<span class="source-line-no">1769</span><span id="line-1769">      long waitTime = SnapshotDescriptionUtils.getMaxMasterTimeout(server.getConfiguration(),</span>
-<span class="source-line-no">1770</span><span id="line-1770">        snapshot.getType(), SnapshotDescriptionUtils.DEFAULT_MAX_WAIT_TIME);</span>
+<span class="source-line-no">925</span><span id="line-925">    RegionInfo[] regionsToMerge = new RegionInfo[request.getRegionCount()];</span>
+<span class="source-line-no">926</span><span id="line-926">    for (int i = 0; i &lt; request.getRegionCount(); i++) {</span>
+<span class="source-line-no">927</span><span id="line-927">      final byte[] encodedNameOfRegion = request.getRegion(i).getValue().toByteArray();</span>
+<span class="source-line-no">928</span><span id="line-928">      if (request.getRegion(i).getType() != RegionSpecifierType.ENCODED_REGION_NAME) {</span>
+<span class="source-line-no">929</span><span id="line-929">        LOG.warn("MergeRegions specifier type: expected: " + RegionSpecifierType.ENCODED_REGION_NAME</span>
+<span class="source-line-no">930</span><span id="line-930">          + " actual: region " + i + " =" + request.getRegion(i).getType());</span>
+<span class="source-line-no">931</span><span id="line-931">      }</span>
+<span class="source-line-no">932</span><span id="line-932">      RegionState regionState = regionStates.getRegionState(Bytes.toString(encodedNameOfRegion));</span>
+<span class="source-line-no">933</span><span id="line-933">      if (regionState == null) {</span>
+<span class="source-line-no">934</span><span id="line-934">        throw new ServiceException(</span>
+<span class="source-line-no">935</span><span id="line-935">          new UnknownRegionException(Bytes.toStringBinary(encodedNameOfRegion)));</span>
+<span class="source-line-no">936</span><span id="line-936">      }</span>
+<span class="source-line-no">937</span><span id="line-937">      regionsToMerge[i] = regionState.getRegion();</span>
+<span class="source-line-no">938</span><span id="line-938">    }</span>
+<span class="source-line-no">939</span><span id="line-939"></span>
+<span class="source-line-no">940</span><span id="line-940">    try {</span>
+<span class="source-line-no">941</span><span id="line-941">      long procId = server.mergeRegions(regionsToMerge, request.getForcible(),</span>
+<span class="source-line-no">942</span><span id="line-942">        request.getNonceGroup(), request.getNonce());</span>
+<span class="source-line-no">943</span><span id="line-943">      return MergeTableRegionsResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">944</span><span id="line-944">    } catch (IOException ioe) {</span>
+<span class="source-line-no">945</span><span id="line-945">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">946</span><span id="line-946">    }</span>
+<span class="source-line-no">947</span><span id="line-947">  }</span>
+<span class="source-line-no">948</span><span id="line-948"></span>
+<span class="source-line-no">949</span><span id="line-949">  @Override</span>
+<span class="source-line-no">950</span><span id="line-950">  public SplitTableRegionResponse splitRegion(final RpcController controller,</span>
+<span class="source-line-no">951</span><span id="line-951">    final SplitTableRegionRequest request) throws ServiceException {</span>
+<span class="source-line-no">952</span><span id="line-952">    try {</span>
+<span class="source-line-no">953</span><span id="line-953">      long procId = server.splitRegion(ProtobufUtil.toRegionInfo(request.getRegionInfo()),</span>
+<span class="source-line-no">954</span><span id="line-954">        request.hasSplitRow() ? request.getSplitRow().toByteArray() : null, request.getNonceGroup(),</span>
+<span class="source-line-no">955</span><span id="line-955">        request.getNonce());</span>
+<span class="source-line-no">956</span><span id="line-956">      return SplitTableRegionResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">957</span><span id="line-957">    } catch (IOException ie) {</span>
+<span class="source-line-no">958</span><span id="line-958">      throw new ServiceException(ie);</span>
+<span class="source-line-no">959</span><span id="line-959">    }</span>
+<span class="source-line-no">960</span><span id="line-960">  }</span>
+<span class="source-line-no">961</span><span id="line-961"></span>
+<span class="source-line-no">962</span><span id="line-962">  @Override</span>
+<span class="source-line-no">963</span><span id="line-963">  public MasterProtos.TruncateRegionResponse truncateRegion(RpcController controller,</span>
+<span class="source-line-no">964</span><span id="line-964">    final MasterProtos.TruncateRegionRequest request) throws ServiceException {</span>
+<span class="source-line-no">965</span><span id="line-965">    try {</span>
+<span class="source-line-no">966</span><span id="line-966">      long procId = server.truncateRegion(ProtobufUtil.toRegionInfo(request.getRegionInfo()),</span>
+<span class="source-line-no">967</span><span id="line-967">        request.getNonceGroup(), request.getNonce());</span>
+<span class="source-line-no">968</span><span id="line-968">      return MasterProtos.TruncateRegionResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">969</span><span id="line-969">    } catch (IOException ie) {</span>
+<span class="source-line-no">970</span><span id="line-970">      throw new ServiceException(ie);</span>
+<span class="source-line-no">971</span><span id="line-971">    }</span>
+<span class="source-line-no">972</span><span id="line-972">  }</span>
+<span class="source-line-no">973</span><span id="line-973"></span>
+<span class="source-line-no">974</span><span id="line-974">  @Override</span>
+<span class="source-line-no">975</span><span id="line-975">  public ClientProtos.CoprocessorServiceResponse execMasterService(final RpcController controller,</span>
+<span class="source-line-no">976</span><span id="line-976">    final ClientProtos.CoprocessorServiceRequest request) throws ServiceException {</span>
+<span class="source-line-no">977</span><span id="line-977">    rpcPreCheck("execMasterService");</span>
+<span class="source-line-no">978</span><span id="line-978">    try {</span>
+<span class="source-line-no">979</span><span id="line-979">      ServerRpcController execController = new ServerRpcController();</span>
+<span class="source-line-no">980</span><span id="line-980">      ClientProtos.CoprocessorServiceCall call = request.getCall();</span>
+<span class="source-line-no">981</span><span id="line-981">      String serviceName = call.getServiceName();</span>
+<span class="source-line-no">982</span><span id="line-982">      String methodName = call.getMethodName();</span>
+<span class="source-line-no">983</span><span id="line-983">      if (!server.coprocessorServiceHandlers.containsKey(serviceName)) {</span>
+<span class="source-line-no">984</span><span id="line-984">        throw new UnknownProtocolException(null,</span>
+<span class="source-line-no">985</span><span id="line-985">          "No registered Master Coprocessor Endpoint found for " + serviceName</span>
+<span class="source-line-no">986</span><span id="line-986">            + ". Has it been enabled?");</span>
+<span class="source-line-no">987</span><span id="line-987">      }</span>
+<span class="source-line-no">988</span><span id="line-988"></span>
+<span class="source-line-no">989</span><span id="line-989">      Service service = server.coprocessorServiceHandlers.get(serviceName);</span>
+<span class="source-line-no">990</span><span id="line-990">      ServiceDescriptor serviceDesc = service.getDescriptorForType();</span>
+<span class="source-line-no">991</span><span id="line-991">      MethodDescriptor methodDesc =</span>
+<span class="source-line-no">992</span><span id="line-992">        CoprocessorRpcUtils.getMethodDescriptor(methodName, serviceDesc);</span>
+<span class="source-line-no">993</span><span id="line-993"></span>
+<span class="source-line-no">994</span><span id="line-994">      Message execRequest = CoprocessorRpcUtils.getRequest(service, methodDesc, call.getRequest());</span>
+<span class="source-line-no">995</span><span id="line-995">      final Message.Builder responseBuilder =</span>
+<span class="source-line-no">996</span><span id="line-996">        service.getResponsePrototype(methodDesc).newBuilderForType();</span>
+<span class="source-line-no">997</span><span id="line-997">      service.callMethod(methodDesc, execController, execRequest, (message) -&gt; {</span>
+<span class="source-line-no">998</span><span id="line-998">        if (message != null) {</span>
+<span class="source-line-no">999</span><span id="line-999">          responseBuilder.mergeFrom(message);</span>
+<span class="source-line-no">1000</span><span id="line-1000">        }</span>
+<span class="source-line-no">1001</span><span id="line-1001">      });</span>
+<span class="source-line-no">1002</span><span id="line-1002">      Message execResult = responseBuilder.build();</span>
+<span class="source-line-no">1003</span><span id="line-1003">      if (execController.getFailedOn() != null) {</span>
+<span class="source-line-no">1004</span><span id="line-1004">        throw execController.getFailedOn();</span>
+<span class="source-line-no">1005</span><span id="line-1005">      }</span>
+<span class="source-line-no">1006</span><span id="line-1006"></span>
+<span class="source-line-no">1007</span><span id="line-1007">      String remoteAddress = RpcServer.getRemoteAddress().map(InetAddress::toString).orElse("");</span>
+<span class="source-line-no">1008</span><span id="line-1008">      User caller = RpcServer.getRequestUser().orElse(null);</span>
+<span class="source-line-no">1009</span><span id="line-1009">      AUDITLOG.info("User {} (remote address: {}) master service request for {}.{}", caller,</span>
+<span class="source-line-no">1010</span><span id="line-1010">        remoteAddress, serviceName, methodName);</span>
+<span class="source-line-no">1011</span><span id="line-1011"></span>
+<span class="source-line-no">1012</span><span id="line-1012">      return CoprocessorRpcUtils.getResponse(execResult, HConstants.EMPTY_BYTE_ARRAY);</span>
+<span class="source-line-no">1013</span><span id="line-1013">    } catch (IOException ie) {</span>
+<span class="source-line-no">1014</span><span id="line-1014">      throw new ServiceException(ie);</span>
+<span class="source-line-no">1015</span><span id="line-1015">    }</span>
+<span class="source-line-no">1016</span><span id="line-1016">  }</span>
+<span class="source-line-no">1017</span><span id="line-1017"></span>
+<span class="source-line-no">1018</span><span id="line-1018">  /**</span>
+<span class="source-line-no">1019</span><span id="line-1019">   * Triggers an asynchronous attempt to run a distributed procedure. {@inheritDoc}</span>
+<span class="source-line-no">1020</span><span id="line-1020">   */</span>
+<span class="source-line-no">1021</span><span id="line-1021">  @Override</span>
+<span class="source-line-no">1022</span><span id="line-1022">  public ExecProcedureResponse execProcedure(RpcController controller, ExecProcedureRequest request)</span>
+<span class="source-line-no">1023</span><span id="line-1023">    throws ServiceException {</span>
+<span class="source-line-no">1024</span><span id="line-1024">    try {</span>
+<span class="source-line-no">1025</span><span id="line-1025">      server.checkInitialized();</span>
+<span class="source-line-no">1026</span><span id="line-1026">      ProcedureDescription desc = request.getProcedure();</span>
+<span class="source-line-no">1027</span><span id="line-1027">      MasterProcedureManager mpm =</span>
+<span class="source-line-no">1028</span><span id="line-1028">        server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span>
+<span class="source-line-no">1029</span><span id="line-1029">      if (mpm == null) {</span>
+<span class="source-line-no">1030</span><span id="line-1030">        throw new ServiceException(</span>
+<span class="source-line-no">1031</span><span id="line-1031">          new DoNotRetryIOException("The procedure is not registered: " + desc.getSignature()));</span>
+<span class="source-line-no">1032</span><span id="line-1032">      }</span>
+<span class="source-line-no">1033</span><span id="line-1033">      LOG.info(server.getClientIdAuditPrefix() + " procedure request for: " + desc.getSignature());</span>
+<span class="source-line-no">1034</span><span id="line-1034">      mpm.checkPermissions(desc, getAccessChecker(), RpcServer.getRequestUser().orElse(null));</span>
+<span class="source-line-no">1035</span><span id="line-1035">      mpm.execProcedure(desc);</span>
+<span class="source-line-no">1036</span><span id="line-1036">      // send back the max amount of time the client should wait for the procedure</span>
+<span class="source-line-no">1037</span><span id="line-1037">      // to complete</span>
+<span class="source-line-no">1038</span><span id="line-1038">      long waitTime = SnapshotDescriptionUtils.DEFAULT_MAX_WAIT_TIME;</span>
+<span class="source-line-no">1039</span><span id="line-1039">      return ExecProcedureResponse.newBuilder().setExpectedTimeout(waitTime).build();</span>
+<span class="source-line-no">1040</span><span id="line-1040">    } catch (ForeignException e) {</span>
+<span class="source-line-no">1041</span><span id="line-1041">      throw new ServiceException(e.getCause());</span>
+<span class="source-line-no">1042</span><span id="line-1042">    } catch (IOException e) {</span>
+<span class="source-line-no">1043</span><span id="line-1043">      throw new ServiceException(e);</span>
+<span class="source-line-no">1044</span><span id="line-1044">    }</span>
+<span class="source-line-no">1045</span><span id="line-1045">  }</span>
+<span class="source-line-no">1046</span><span id="line-1046"></span>
+<span class="source-line-no">1047</span><span id="line-1047">  /**</span>
+<span class="source-line-no">1048</span><span id="line-1048">   * Triggers a synchronous attempt to run a distributed procedure and sets return data in response.</span>
+<span class="source-line-no">1049</span><span id="line-1049">   * {@inheritDoc}</span>
+<span class="source-line-no">1050</span><span id="line-1050">   */</span>
+<span class="source-line-no">1051</span><span id="line-1051">  @Override</span>
+<span class="source-line-no">1052</span><span id="line-1052">  public ExecProcedureResponse execProcedureWithRet(RpcController controller,</span>
+<span class="source-line-no">1053</span><span id="line-1053">    ExecProcedureRequest request) throws ServiceException {</span>
+<span class="source-line-no">1054</span><span id="line-1054">    rpcPreCheck("execProcedureWithRet");</span>
+<span class="source-line-no">1055</span><span id="line-1055">    try {</span>
+<span class="source-line-no">1056</span><span id="line-1056">      ProcedureDescription desc = request.getProcedure();</span>
+<span class="source-line-no">1057</span><span id="line-1057">      MasterProcedureManager mpm =</span>
+<span class="source-line-no">1058</span><span id="line-1058">        server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span>
+<span class="source-line-no">1059</span><span id="line-1059">      if (mpm == null) {</span>
+<span class="source-line-no">1060</span><span id="line-1060">        throw new ServiceException("The procedure is not registered: " + desc.getSignature());</span>
+<span class="source-line-no">1061</span><span id="line-1061">      }</span>
+<span class="source-line-no">1062</span><span id="line-1062">      LOG.info(server.getClientIdAuditPrefix() + " procedure request for: " + desc.getSignature());</span>
+<span class="source-line-no">1063</span><span id="line-1063">      byte[] data = mpm.execProcedureWithRet(desc);</span>
+<span class="source-line-no">1064</span><span id="line-1064">      ExecProcedureResponse.Builder builder = ExecProcedureResponse.newBuilder();</span>
+<span class="source-line-no">1065</span><span id="line-1065">      // set return data if available</span>
+<span class="source-line-no">1066</span><span id="line-1066">      if (data != null) {</span>
+<span class="source-line-no">1067</span><span id="line-1067">        builder.setReturnData(UnsafeByteOperations.unsafeWrap(data));</span>
+<span class="source-line-no">1068</span><span id="line-1068">      }</span>
+<span class="source-line-no">1069</span><span id="line-1069">      return builder.build();</span>
+<span class="source-line-no">1070</span><span id="line-1070">    } catch (IOException e) {</span>
+<span class="source-line-no">1071</span><span id="line-1071">      throw new ServiceException(e);</span>
+<span class="source-line-no">1072</span><span id="line-1072">    }</span>
+<span class="source-line-no">1073</span><span id="line-1073">  }</span>
+<span class="source-line-no">1074</span><span id="line-1074"></span>
+<span class="source-line-no">1075</span><span id="line-1075">  @Override</span>
+<span class="source-line-no">1076</span><span id="line-1076">  public GetClusterStatusResponse getClusterStatus(RpcController controller,</span>
+<span class="source-line-no">1077</span><span id="line-1077">    GetClusterStatusRequest req) throws ServiceException {</span>
+<span class="source-line-no">1078</span><span id="line-1078">    GetClusterStatusResponse.Builder response = GetClusterStatusResponse.newBuilder();</span>
+<span class="source-line-no">1079</span><span id="line-1079">    try {</span>
+<span class="source-line-no">1080</span><span id="line-1080">      // We used to check if Master was up at this point but let this call proceed even if</span>
+<span class="source-line-no">1081</span><span id="line-1081">      // Master is initializing... else we shut out stuff like hbck2 tool from making progress</span>
+<span class="source-line-no">1082</span><span id="line-1082">      // since it queries this method to figure cluster version. hbck2 wants to be able to work</span>
+<span class="source-line-no">1083</span><span id="line-1083">      // against Master even if it is 'initializing' so it can do fixup.</span>
+<span class="source-line-no">1084</span><span id="line-1084">      response.setClusterStatus(ClusterMetricsBuilder.toClusterStatus(</span>
+<span class="source-line-no">1085</span><span id="line-1085">        server.getClusterMetrics(ClusterMetricsBuilder.toOptions(req.getOptionsList()))));</span>
+<span class="source-line-no">1086</span><span id="line-1086">    } catch (IOException e) {</span>
+<span class="source-line-no">1087</span><span id="line-1087">      throw new ServiceException(e);</span>
+<span class="source-line-no">1088</span><span id="line-1088">    }</span>
+<span class="source-line-no">1089</span><span id="line-1089">    return response.build();</span>
+<span class="source-line-no">1090</span><span id="line-1090">  }</span>
+<span class="source-line-no">1091</span><span id="line-1091"></span>
+<span class="source-line-no">1092</span><span id="line-1092">  /**</span>
+<span class="source-line-no">1093</span><span id="line-1093">   * List the currently available/stored snapshots. Any in-progress snapshots are ignored</span>
+<span class="source-line-no">1094</span><span id="line-1094">   */</span>
+<span class="source-line-no">1095</span><span id="line-1095">  @Override</span>
+<span class="source-line-no">1096</span><span id="line-1096">  public GetCompletedSnapshotsResponse getCompletedSnapshots(RpcController controller,</span>
+<span class="source-line-no">1097</span><span id="line-1097">    GetCompletedSnapshotsRequest request) throws ServiceException {</span>
+<span class="source-line-no">1098</span><span id="line-1098">    try {</span>
+<span class="source-line-no">1099</span><span id="line-1099">      server.checkInitialized();</span>
+<span class="source-line-no">1100</span><span id="line-1100">      GetCompletedSnapshotsResponse.Builder builder = GetCompletedSnapshotsResponse.newBuilder();</span>
+<span class="source-line-no">1101</span><span id="line-1101">      List&lt;SnapshotDescription&gt; snapshots = server.snapshotManager.getCompletedSnapshots();</span>
+<span class="source-line-no">1102</span><span id="line-1102"></span>
+<span class="source-line-no">1103</span><span id="line-1103">      // convert to protobuf</span>
+<span class="source-line-no">1104</span><span id="line-1104">      for (SnapshotDescription snapshot : snapshots) {</span>
+<span class="source-line-no">1105</span><span id="line-1105">        builder.addSnapshots(snapshot);</span>
+<span class="source-line-no">1106</span><span id="line-1106">      }</span>
+<span class="source-line-no">1107</span><span id="line-1107">      return builder.build();</span>
+<span class="source-line-no">1108</span><span id="line-1108">    } catch (IOException e) {</span>
+<span class="source-line-no">1109</span><span id="line-1109">      throw new ServiceException(e);</span>
+<span class="source-line-no">1110</span><span id="line-1110">    }</span>
+<span class="source-line-no">1111</span><span id="line-1111">  }</span>
+<span class="source-line-no">1112</span><span id="line-1112"></span>
+<span class="source-line-no">1113</span><span id="line-1113">  @Override</span>
+<span class="source-line-no">1114</span><span id="line-1114">  public ListNamespacesResponse listNamespaces(RpcController controller,</span>
+<span class="source-line-no">1115</span><span id="line-1115">    ListNamespacesRequest request) throws ServiceException {</span>
+<span class="source-line-no">1116</span><span id="line-1116">    try {</span>
+<span class="source-line-no">1117</span><span id="line-1117">      return ListNamespacesResponse.newBuilder().addAllNamespaceName(server.listNamespaces())</span>
+<span class="source-line-no">1118</span><span id="line-1118">        .build();</span>
+<span class="source-line-no">1119</span><span id="line-1119">    } catch (IOException e) {</span>
+<span class="source-line-no">1120</span><span id="line-1120">      throw new ServiceException(e);</span>
+<span class="source-line-no">1121</span><span id="line-1121">    }</span>
+<span class="source-line-no">1122</span><span id="line-1122">  }</span>
+<span class="source-line-no">1123</span><span id="line-1123"></span>
+<span class="source-line-no">1124</span><span id="line-1124">  @Override</span>
+<span class="source-line-no">1125</span><span id="line-1125">  public GetNamespaceDescriptorResponse getNamespaceDescriptor(RpcController controller,</span>
+<span class="source-line-no">1126</span><span id="line-1126">    GetNamespaceDescriptorRequest request) throws ServiceException {</span>
+<span class="source-line-no">1127</span><span id="line-1127">    try {</span>
+<span class="source-line-no">1128</span><span id="line-1128">      return GetNamespaceDescriptorResponse.newBuilder()</span>
+<span class="source-line-no">1129</span><span id="line-1129">        .setNamespaceDescriptor(</span>
+<span class="source-line-no">1130</span><span id="line-1130">          ProtobufUtil.toProtoNamespaceDescriptor(server.getNamespace(request.getNamespaceName())))</span>
+<span class="source-line-no">1131</span><span id="line-1131">        .build();</span>
+<span class="source-line-no">1132</span><span id="line-1132">    } catch (IOException e) {</span>
+<span class="source-line-no">1133</span><span id="line-1133">      throw new ServiceException(e);</span>
+<span class="source-line-no">1134</span><span id="line-1134">    }</span>
+<span class="source-line-no">1135</span><span id="line-1135">  }</span>
+<span class="source-line-no">1136</span><span id="line-1136"></span>
+<span class="source-line-no">1137</span><span id="line-1137">  /**</span>
+<span class="source-line-no">1138</span><span id="line-1138">   * Get the number of regions of the table that have been updated by the alter.</span>
+<span class="source-line-no">1139</span><span id="line-1139">   * @return Pair indicating the number of regions updated Pair.getFirst is the regions that are yet</span>
+<span class="source-line-no">1140</span><span id="line-1140">   *         to be updated Pair.getSecond is the total number of regions of the table</span>
+<span class="source-line-no">1141</span><span id="line-1141">   */</span>
+<span class="source-line-no">1142</span><span id="line-1142">  @Override</span>
+<span class="source-line-no">1143</span><span id="line-1143">  public GetSchemaAlterStatusResponse getSchemaAlterStatus(RpcController controller,</span>
+<span class="source-line-no">1144</span><span id="line-1144">    GetSchemaAlterStatusRequest req) throws ServiceException {</span>
+<span class="source-line-no">1145</span><span id="line-1145">    // TODO: currently, we query using the table name on the client side. this</span>
+<span class="source-line-no">1146</span><span id="line-1146">    // may overlap with other table operations or the table operation may</span>
+<span class="source-line-no">1147</span><span id="line-1147">    // have completed before querying this API. We need to refactor to a</span>
+<span class="source-line-no">1148</span><span id="line-1148">    // transaction system in the future to avoid these ambiguities.</span>
+<span class="source-line-no">1149</span><span id="line-1149">    TableName tableName = ProtobufUtil.toTableName(req.getTableName());</span>
+<span class="source-line-no">1150</span><span id="line-1150"></span>
+<span class="source-line-no">1151</span><span id="line-1151">    try {</span>
+<span class="source-line-no">1152</span><span id="line-1152">      server.checkInitialized();</span>
+<span class="source-line-no">1153</span><span id="line-1153">      Pair&lt;Integer, Integer&gt; pair = server.getAssignmentManager().getReopenStatus(tableName);</span>
+<span class="source-line-no">1154</span><span id="line-1154">      GetSchemaAlterStatusResponse.Builder ret = GetSchemaAlterStatusResponse.newBuilder();</span>
+<span class="source-line-no">1155</span><span id="line-1155">      ret.setYetToUpdateRegions(pair.getFirst());</span>
+<span class="source-line-no">1156</span><span id="line-1156">      ret.setTotalRegions(pair.getSecond());</span>
+<span class="source-line-no">1157</span><span id="line-1157">      return ret.build();</span>
+<span class="source-line-no">1158</span><span id="line-1158">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1159</span><span id="line-1159">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1160</span><span id="line-1160">    }</span>
+<span class="source-line-no">1161</span><span id="line-1161">  }</span>
+<span class="source-line-no">1162</span><span id="line-1162"></span>
+<span class="source-line-no">1163</span><span id="line-1163">  /**</span>
+<span class="source-line-no">1164</span><span id="line-1164">   * Get list of TableDescriptors for requested tables.</span>
+<span class="source-line-no">1165</span><span id="line-1165">   * @param c   Unused (set to null).</span>
+<span class="source-line-no">1166</span><span id="line-1166">   * @param req GetTableDescriptorsRequest that contains: - tableNames: requested tables, or if</span>
+<span class="source-line-no">1167</span><span id="line-1167">   *            empty, all are requested.</span>
+<span class="source-line-no">1168</span><span id="line-1168">   */</span>
+<span class="source-line-no">1169</span><span id="line-1169">  @Override</span>
+<span class="source-line-no">1170</span><span id="line-1170">  public GetTableDescriptorsResponse getTableDescriptors(RpcController c,</span>
+<span class="source-line-no">1171</span><span id="line-1171">    GetTableDescriptorsRequest req) throws ServiceException {</span>
+<span class="source-line-no">1172</span><span id="line-1172">    try {</span>
+<span class="source-line-no">1173</span><span id="line-1173">      server.checkInitialized();</span>
+<span class="source-line-no">1174</span><span id="line-1174"></span>
+<span class="source-line-no">1175</span><span id="line-1175">      final String regex = req.hasRegex() ? req.getRegex() : null;</span>
+<span class="source-line-no">1176</span><span id="line-1176">      final String namespace = req.hasNamespace() ? req.getNamespace() : null;</span>
+<span class="source-line-no">1177</span><span id="line-1177">      List&lt;TableName&gt; tableNameList = null;</span>
+<span class="source-line-no">1178</span><span id="line-1178">      if (req.getTableNamesCount() &gt; 0) {</span>
+<span class="source-line-no">1179</span><span id="line-1179">        tableNameList = new ArrayList&lt;TableName&gt;(req.getTableNamesCount());</span>
+<span class="source-line-no">1180</span><span id="line-1180">        for (HBaseProtos.TableName tableNamePB : req.getTableNamesList()) {</span>
+<span class="source-line-no">1181</span><span id="line-1181">          tableNameList.add(ProtobufUtil.toTableName(tableNamePB));</span>
+<span class="source-line-no">1182</span><span id="line-1182">        }</span>
+<span class="source-line-no">1183</span><span id="line-1183">      }</span>
+<span class="source-line-no">1184</span><span id="line-1184"></span>
+<span class="source-line-no">1185</span><span id="line-1185">      List&lt;TableDescriptor&gt; descriptors =</span>
+<span class="source-line-no">1186</span><span id="line-1186">        server.listTableDescriptors(namespace, regex, tableNameList, req.getIncludeSysTables());</span>
+<span class="source-line-no">1187</span><span id="line-1187"></span>
+<span class="source-line-no">1188</span><span id="line-1188">      GetTableDescriptorsResponse.Builder builder = GetTableDescriptorsResponse.newBuilder();</span>
+<span class="source-line-no">1189</span><span id="line-1189">      if (descriptors != null &amp;&amp; descriptors.size() &gt; 0) {</span>
+<span class="source-line-no">1190</span><span id="line-1190">        // Add the table descriptors to the response</span>
+<span class="source-line-no">1191</span><span id="line-1191">        for (TableDescriptor htd : descriptors) {</span>
+<span class="source-line-no">1192</span><span id="line-1192">          builder.addTableSchema(ProtobufUtil.toTableSchema(htd));</span>
+<span class="source-line-no">1193</span><span id="line-1193">        }</span>
+<span class="source-line-no">1194</span><span id="line-1194">      }</span>
+<span class="source-line-no">1195</span><span id="line-1195">      return builder.build();</span>
+<span class="source-line-no">1196</span><span id="line-1196">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1197</span><span id="line-1197">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1198</span><span id="line-1198">    }</span>
+<span class="source-line-no">1199</span><span id="line-1199">  }</span>
+<span class="source-line-no">1200</span><span id="line-1200"></span>
+<span class="source-line-no">1201</span><span id="line-1201">  @Override</span>
+<span class="source-line-no">1202</span><span id="line-1202">  public ListTableDescriptorsByStateResponse listTableDescriptorsByState(RpcController controller,</span>
+<span class="source-line-no">1203</span><span id="line-1203">    ListTableDescriptorsByStateRequest request) throws ServiceException {</span>
+<span class="source-line-no">1204</span><span id="line-1204">    try {</span>
+<span class="source-line-no">1205</span><span id="line-1205">      server.checkInitialized();</span>
+<span class="source-line-no">1206</span><span id="line-1206">      List&lt;TableDescriptor&gt; descriptors = server.listTableDescriptors(null, null, null, false);</span>
+<span class="source-line-no">1207</span><span id="line-1207"></span>
+<span class="source-line-no">1208</span><span id="line-1208">      ListTableDescriptorsByStateResponse.Builder builder =</span>
+<span class="source-line-no">1209</span><span id="line-1209">        ListTableDescriptorsByStateResponse.newBuilder();</span>
+<span class="source-line-no">1210</span><span id="line-1210">      if (descriptors != null &amp;&amp; descriptors.size() &gt; 0) {</span>
+<span class="source-line-no">1211</span><span id="line-1211">        // Add the table descriptors to the response</span>
+<span class="source-line-no">1212</span><span id="line-1212">        TableState.State state =</span>
+<span class="source-line-no">1213</span><span id="line-1213">          request.getIsEnabled() ? TableState.State.ENABLED : TableState.State.DISABLED;</span>
+<span class="source-line-no">1214</span><span id="line-1214">        for (TableDescriptor htd : descriptors) {</span>
+<span class="source-line-no">1215</span><span id="line-1215">          if (server.getTableStateManager().isTableState(htd.getTableName(), state)) {</span>
+<span class="source-line-no">1216</span><span id="line-1216">            builder.addTableSchema(ProtobufUtil.toTableSchema(htd));</span>
+<span class="source-line-no">1217</span><span id="line-1217">          }</span>
+<span class="source-line-no">1218</span><span id="line-1218">        }</span>
+<span class="source-line-no">1219</span><span id="line-1219">      }</span>
+<span class="source-line-no">1220</span><span id="line-1220">      return builder.build();</span>
+<span class="source-line-no">1221</span><span id="line-1221">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1222</span><span id="line-1222">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1223</span><span id="line-1223">    }</span>
+<span class="source-line-no">1224</span><span id="line-1224">  }</span>
+<span class="source-line-no">1225</span><span id="line-1225"></span>
+<span class="source-line-no">1226</span><span id="line-1226">  /**</span>
+<span class="source-line-no">1227</span><span id="line-1227">   * Get list of userspace table names</span>
+<span class="source-line-no">1228</span><span id="line-1228">   * @param controller Unused (set to null).</span>
+<span class="source-line-no">1229</span><span id="line-1229">   * @param req        GetTableNamesRequest</span>
+<span class="source-line-no">1230</span><span id="line-1230">   */</span>
+<span class="source-line-no">1231</span><span id="line-1231">  @Override</span>
+<span class="source-line-no">1232</span><span id="line-1232">  public GetTableNamesResponse getTableNames(RpcController controller, GetTableNamesRequest req)</span>
+<span class="source-line-no">1233</span><span id="line-1233">    throws ServiceException {</span>
+<span class="source-line-no">1234</span><span id="line-1234">    try {</span>
+<span class="source-line-no">1235</span><span id="line-1235">      server.checkServiceStarted();</span>
+<span class="source-line-no">1236</span><span id="line-1236"></span>
+<span class="source-line-no">1237</span><span id="line-1237">      final String regex = req.hasRegex() ? req.getRegex() : null;</span>
+<span class="source-line-no">1238</span><span id="line-1238">      final String namespace = req.hasNamespace() ? req.getNamespace() : null;</span>
+<span class="source-line-no">1239</span><span id="line-1239">      List&lt;TableName&gt; tableNames =</span>
+<span class="source-line-no">1240</span><span id="line-1240">        server.listTableNames(namespace, regex, req.getIncludeSysTables());</span>
+<span class="source-line-no">1241</span><span id="line-1241"></span>
+<span class="source-line-no">1242</span><span id="line-1242">      GetTableNamesResponse.Builder builder = GetTableNamesResponse.newBuilder();</span>
+<span class="source-line-no">1243</span><span id="line-1243">      if (tableNames != null &amp;&amp; tableNames.size() &gt; 0) {</span>
+<span class="source-line-no">1244</span><span id="line-1244">        // Add the table names to the response</span>
+<span class="source-line-no">1245</span><span id="line-1245">        for (TableName table : tableNames) {</span>
+<span class="source-line-no">1246</span><span id="line-1246">          builder.addTableNames(ProtobufUtil.toProtoTableName(table));</span>
+<span class="source-line-no">1247</span><span id="line-1247">        }</span>
+<span class="source-line-no">1248</span><span id="line-1248">      }</span>
+<span class="source-line-no">1249</span><span id="line-1249">      return builder.build();</span>
+<span class="source-line-no">1250</span><span id="line-1250">    } catch (IOException e) {</span>
+<span class="source-line-no">1251</span><span id="line-1251">      throw new ServiceException(e);</span>
+<span class="source-line-no">1252</span><span id="line-1252">    }</span>
+<span class="source-line-no">1253</span><span id="line-1253">  }</span>
+<span class="source-line-no">1254</span><span id="line-1254"></span>
+<span class="source-line-no">1255</span><span id="line-1255">  @Override</span>
+<span class="source-line-no">1256</span><span id="line-1256">  public ListTableNamesByStateResponse listTableNamesByState(RpcController controller,</span>
+<span class="source-line-no">1257</span><span id="line-1257">    ListTableNamesByStateRequest request) throws ServiceException {</span>
+<span class="source-line-no">1258</span><span id="line-1258">    try {</span>
+<span class="source-line-no">1259</span><span id="line-1259">      server.checkServiceStarted();</span>
+<span class="source-line-no">1260</span><span id="line-1260">      List&lt;TableName&gt; tableNames = server.listTableNames(null, null, false);</span>
+<span class="source-line-no">1261</span><span id="line-1261">      ListTableNamesByStateResponse.Builder builder = ListTableNamesByStateResponse.newBuilder();</span>
+<span class="source-line-no">1262</span><span id="line-1262">      if (tableNames != null &amp;&amp; tableNames.size() &gt; 0) {</span>
+<span class="source-line-no">1263</span><span id="line-1263">        // Add the disabled table names to the response</span>
+<span class="source-line-no">1264</span><span id="line-1264">        TableState.State state =</span>
+<span class="source-line-no">1265</span><span id="line-1265">          request.getIsEnabled() ? TableState.State.ENABLED : TableState.State.DISABLED;</span>
+<span class="source-line-no">1266</span><span id="line-1266">        for (TableName table : tableNames) {</span>
+<span class="source-line-no">1267</span><span id="line-1267">          if (server.getTableStateManager().isTableState(table, state)) {</span>
+<span class="source-line-no">1268</span><span id="line-1268">            builder.addTableNames(ProtobufUtil.toProtoTableName(table));</span>
+<span class="source-line-no">1269</span><span id="line-1269">          }</span>
+<span class="source-line-no">1270</span><span id="line-1270">        }</span>
+<span class="source-line-no">1271</span><span id="line-1271">      }</span>
+<span class="source-line-no">1272</span><span id="line-1272">      return builder.build();</span>
+<span class="source-line-no">1273</span><span id="line-1273">    } catch (IOException e) {</span>
+<span class="source-line-no">1274</span><span id="line-1274">      throw new ServiceException(e);</span>
+<span class="source-line-no">1275</span><span id="line-1275">    }</span>
+<span class="source-line-no">1276</span><span id="line-1276">  }</span>
+<span class="source-line-no">1277</span><span id="line-1277"></span>
+<span class="source-line-no">1278</span><span id="line-1278">  @Override</span>
+<span class="source-line-no">1279</span><span id="line-1279">  public GetTableStateResponse getTableState(RpcController controller, GetTableStateRequest request)</span>
+<span class="source-line-no">1280</span><span id="line-1280">    throws ServiceException {</span>
+<span class="source-line-no">1281</span><span id="line-1281">    try {</span>
+<span class="source-line-no">1282</span><span id="line-1282">      server.checkServiceStarted();</span>
+<span class="source-line-no">1283</span><span id="line-1283">      TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span>
+<span class="source-line-no">1284</span><span id="line-1284">      TableState ts = server.getTableStateManager().getTableState(tableName);</span>
+<span class="source-line-no">1285</span><span id="line-1285">      GetTableStateResponse.Builder builder = GetTableStateResponse.newBuilder();</span>
+<span class="source-line-no">1286</span><span id="line-1286">      builder.setTableState(ts.convert());</span>
+<span class="source-line-no">1287</span><span id="line-1287">      return builder.build();</span>
+<span class="source-line-no">1288</span><span id="line-1288">    } catch (IOException e) {</span>
+<span class="source-line-no">1289</span><span id="line-1289">      throw new ServiceException(e);</span>
+<span class="source-line-no">1290</span><span id="line-1290">    }</span>
+<span class="source-line-no">1291</span><span id="line-1291">  }</span>
+<span class="source-line-no">1292</span><span id="line-1292"></span>
+<span class="source-line-no">1293</span><span id="line-1293">  @Override</span>
+<span class="source-line-no">1294</span><span id="line-1294">  public IsCatalogJanitorEnabledResponse isCatalogJanitorEnabled(RpcController c,</span>
+<span class="source-line-no">1295</span><span id="line-1295">    IsCatalogJanitorEnabledRequest req) throws ServiceException {</span>
+<span class="source-line-no">1296</span><span id="line-1296">    return IsCatalogJanitorEnabledResponse.newBuilder().setValue(server.isCatalogJanitorEnabled())</span>
+<span class="source-line-no">1297</span><span id="line-1297">      .build();</span>
+<span class="source-line-no">1298</span><span id="line-1298">  }</span>
+<span class="source-line-no">1299</span><span id="line-1299"></span>
+<span class="source-line-no">1300</span><span id="line-1300">  @Override</span>
+<span class="source-line-no">1301</span><span id="line-1301">  public IsCleanerChoreEnabledResponse isCleanerChoreEnabled(RpcController c,</span>
+<span class="source-line-no">1302</span><span id="line-1302">    IsCleanerChoreEnabledRequest req) throws ServiceException {</span>
+<span class="source-line-no">1303</span><span id="line-1303">    return IsCleanerChoreEnabledResponse.newBuilder().setValue(server.isCleanerChoreEnabled())</span>
+<span class="source-line-no">1304</span><span id="line-1304">      .build();</span>
+<span class="source-line-no">1305</span><span id="line-1305">  }</span>
+<span class="source-line-no">1306</span><span id="line-1306"></span>
+<span class="source-line-no">1307</span><span id="line-1307">  @Override</span>
+<span class="source-line-no">1308</span><span id="line-1308">  public IsMasterRunningResponse isMasterRunning(RpcController c, IsMasterRunningRequest req)</span>
+<span class="source-line-no">1309</span><span id="line-1309">    throws ServiceException {</span>
+<span class="source-line-no">1310</span><span id="line-1310">    try {</span>
+<span class="source-line-no">1311</span><span id="line-1311">      server.checkServiceStarted();</span>
+<span class="source-line-no">1312</span><span id="line-1312">      return IsMasterRunningResponse.newBuilder().setIsMasterRunning(!server.isStopped()).build();</span>
+<span class="source-line-no">1313</span><span id="line-1313">    } catch (IOException e) {</span>
+<span class="source-line-no">1314</span><span id="line-1314">      throw new ServiceException(e);</span>
+<span class="source-line-no">1315</span><span id="line-1315">    }</span>
+<span class="source-line-no">1316</span><span id="line-1316">  }</span>
+<span class="source-line-no">1317</span><span id="line-1317"></span>
+<span class="source-line-no">1318</span><span id="line-1318">  /**</span>
+<span class="source-line-no">1319</span><span id="line-1319">   * Checks if the specified procedure is done.</span>
+<span class="source-line-no">1320</span><span id="line-1320">   * @return true if the procedure is done, false if the procedure is in the process of completing</span>
+<span class="source-line-no">1321</span><span id="line-1321">   * @throws ServiceException if invalid procedure or failed procedure with progress failure reason.</span>
+<span class="source-line-no">1322</span><span id="line-1322">   */</span>
+<span class="source-line-no">1323</span><span id="line-1323">  @Override</span>
+<span class="source-line-no">1324</span><span id="line-1324">  public IsProcedureDoneResponse isProcedureDone(RpcController controller,</span>
+<span class="source-line-no">1325</span><span id="line-1325">    IsProcedureDoneRequest request) throws ServiceException {</span>
+<span class="source-line-no">1326</span><span id="line-1326">    try {</span>
+<span class="source-line-no">1327</span><span id="line-1327">      server.checkInitialized();</span>
+<span class="source-line-no">1328</span><span id="line-1328">      ProcedureDescription desc = request.getProcedure();</span>
+<span class="source-line-no">1329</span><span id="line-1329">      MasterProcedureManager mpm =</span>
+<span class="source-line-no">1330</span><span id="line-1330">        server.getMasterProcedureManagerHost().getProcedureManager(desc.getSignature());</span>
+<span class="source-line-no">1331</span><span id="line-1331">      if (mpm == null) {</span>
+<span class="source-line-no">1332</span><span id="line-1332">        throw new ServiceException("The procedure is not registered: " + desc.getSignature());</span>
+<span class="source-line-no">1333</span><span id="line-1333">      }</span>
+<span class="source-line-no">1334</span><span id="line-1334">      LOG.debug("Checking to see if procedure from request:" + desc.getSignature() + " is done");</span>
+<span class="source-line-no">1335</span><span id="line-1335"></span>
+<span class="source-line-no">1336</span><span id="line-1336">      IsProcedureDoneResponse.Builder builder = IsProcedureDoneResponse.newBuilder();</span>
+<span class="source-line-no">1337</span><span id="line-1337">      boolean done = mpm.isProcedureDone(desc);</span>
+<span class="source-line-no">1338</span><span id="line-1338">      builder.setDone(done);</span>
+<span class="source-line-no">1339</span><span id="line-1339">      return builder.build();</span>
+<span class="source-line-no">1340</span><span id="line-1340">    } catch (ForeignException e) {</span>
+<span class="source-line-no">1341</span><span id="line-1341">      throw new ServiceException(e.getCause());</span>
+<span class="source-line-no">1342</span><span id="line-1342">    } catch (IOException e) {</span>
+<span class="source-line-no">1343</span><span id="line-1343">      throw new ServiceException(e);</span>
+<span class="source-line-no">1344</span><span id="line-1344">    }</span>
+<span class="source-line-no">1345</span><span id="line-1345">  }</span>
+<span class="source-line-no">1346</span><span id="line-1346"></span>
+<span class="source-line-no">1347</span><span id="line-1347">  /**</span>
+<span class="source-line-no">1348</span><span id="line-1348">   * Checks if the specified snapshot is done.</span>
+<span class="source-line-no">1349</span><span id="line-1349">   * @return true if the snapshot is in file system ready to use, false if the snapshot is in the</span>
+<span class="source-line-no">1350</span><span id="line-1350">   *         process of completing</span>
+<span class="source-line-no">1351</span><span id="line-1351">   * @throws ServiceException wrapping UnknownSnapshotException if invalid snapshot, or a wrapped</span>
+<span class="source-line-no">1352</span><span id="line-1352">   *                          HBaseSnapshotException with progress failure reason.</span>
+<span class="source-line-no">1353</span><span id="line-1353">   */</span>
+<span class="source-line-no">1354</span><span id="line-1354">  @Override</span>
+<span class="source-line-no">1355</span><span id="line-1355">  public IsSnapshotDoneResponse isSnapshotDone(RpcController controller,</span>
+<span class="source-line-no">1356</span><span id="line-1356">    IsSnapshotDoneRequest request) throws ServiceException {</span>
+<span class="source-line-no">1357</span><span id="line-1357">    LOG.debug("Checking to see if snapshot from request:"</span>
+<span class="source-line-no">1358</span><span id="line-1358">      + ClientSnapshotDescriptionUtils.toString(request.getSnapshot()) + " is done");</span>
+<span class="source-line-no">1359</span><span id="line-1359">    try {</span>
+<span class="source-line-no">1360</span><span id="line-1360">      server.checkInitialized();</span>
+<span class="source-line-no">1361</span><span id="line-1361">      IsSnapshotDoneResponse.Builder builder = IsSnapshotDoneResponse.newBuilder();</span>
+<span class="source-line-no">1362</span><span id="line-1362">      boolean done = server.snapshotManager.isSnapshotDone(request.getSnapshot());</span>
+<span class="source-line-no">1363</span><span id="line-1363">      builder.setDone(done);</span>
+<span class="source-line-no">1364</span><span id="line-1364">      return builder.build();</span>
+<span class="source-line-no">1365</span><span id="line-1365">    } catch (ForeignException e) {</span>
+<span class="source-line-no">1366</span><span id="line-1366">      throw new ServiceException(e.getCause());</span>
+<span class="source-line-no">1367</span><span id="line-1367">    } catch (IOException e) {</span>
+<span class="source-line-no">1368</span><span id="line-1368">      throw new ServiceException(e);</span>
+<span class="source-line-no">1369</span><span id="line-1369">    }</span>
+<span class="source-line-no">1370</span><span id="line-1370">  }</span>
+<span class="source-line-no">1371</span><span id="line-1371"></span>
+<span class="source-line-no">1372</span><span id="line-1372">  @Override</span>
+<span class="source-line-no">1373</span><span id="line-1373">  public GetProcedureResultResponse getProcedureResult(RpcController controller,</span>
+<span class="source-line-no">1374</span><span id="line-1374">    GetProcedureResultRequest request) throws ServiceException {</span>
+<span class="source-line-no">1375</span><span id="line-1375">    LOG.debug("Checking to see if procedure is done pid=" + request.getProcId());</span>
+<span class="source-line-no">1376</span><span id="line-1376">    try {</span>
+<span class="source-line-no">1377</span><span id="line-1377">      server.checkInitialized();</span>
+<span class="source-line-no">1378</span><span id="line-1378">      GetProcedureResultResponse.Builder builder = GetProcedureResultResponse.newBuilder();</span>
+<span class="source-line-no">1379</span><span id="line-1379">      long procId = request.getProcId();</span>
+<span class="source-line-no">1380</span><span id="line-1380">      ProcedureExecutor&lt;?&gt; executor = server.getMasterProcedureExecutor();</span>
+<span class="source-line-no">1381</span><span id="line-1381">      Procedure&lt;?&gt; result = executor.getResultOrProcedure(procId);</span>
+<span class="source-line-no">1382</span><span id="line-1382">      if (result != null) {</span>
+<span class="source-line-no">1383</span><span id="line-1383">        builder.setSubmittedTime(result.getSubmittedTime());</span>
+<span class="source-line-no">1384</span><span id="line-1384">        builder.setLastUpdate(result.getLastUpdate());</span>
+<span class="source-line-no">1385</span><span id="line-1385">        if (executor.isFinished(procId)) {</span>
+<span class="source-line-no">1386</span><span id="line-1386">          builder.setState(GetProcedureResultResponse.State.FINISHED);</span>
+<span class="source-line-no">1387</span><span id="line-1387">          if (result.isFailed()) {</span>
+<span class="source-line-no">1388</span><span id="line-1388">            IOException exception = MasterProcedureUtil.unwrapRemoteIOException(result);</span>
+<span class="source-line-no">1389</span><span id="line-1389">            builder.setException(ForeignExceptionUtil.toProtoForeignException(exception));</span>
+<span class="source-line-no">1390</span><span id="line-1390">          }</span>
+<span class="source-line-no">1391</span><span id="line-1391">          byte[] resultData = result.getResult();</span>
+<span class="source-line-no">1392</span><span id="line-1392">          if (resultData != null) {</span>
+<span class="source-line-no">1393</span><span id="line-1393">            builder.setResult(UnsafeByteOperations.unsafeWrap(resultData));</span>
+<span class="source-line-no">1394</span><span id="line-1394">          }</span>
+<span class="source-line-no">1395</span><span id="line-1395">          server.getMasterProcedureExecutor().removeResult(request.getProcId());</span>
+<span class="source-line-no">1396</span><span id="line-1396">        } else {</span>
+<span class="source-line-no">1397</span><span id="line-1397">          builder.setState(GetProcedureResultResponse.State.RUNNING);</span>
+<span class="source-line-no">1398</span><span id="line-1398">        }</span>
+<span class="source-line-no">1399</span><span id="line-1399">      } else {</span>
+<span class="source-line-no">1400</span><span id="line-1400">        builder.setState(GetProcedureResultResponse.State.NOT_FOUND);</span>
+<span class="source-line-no">1401</span><span id="line-1401">      }</span>
+<span class="source-line-no">1402</span><span id="line-1402">      return builder.build();</span>
+<span class="source-line-no">1403</span><span id="line-1403">    } catch (IOException e) {</span>
+<span class="source-line-no">1404</span><span id="line-1404">      throw new ServiceException(e);</span>
+<span class="source-line-no">1405</span><span id="line-1405">    }</span>
+<span class="source-line-no">1406</span><span id="line-1406">  }</span>
+<span class="source-line-no">1407</span><span id="line-1407"></span>
+<span class="source-line-no">1408</span><span id="line-1408">  @Override</span>
+<span class="source-line-no">1409</span><span id="line-1409">  public AbortProcedureResponse abortProcedure(RpcController rpcController,</span>
+<span class="source-line-no">1410</span><span id="line-1410">    AbortProcedureRequest request) throws ServiceException {</span>
+<span class="source-line-no">1411</span><span id="line-1411">    try {</span>
+<span class="source-line-no">1412</span><span id="line-1412">      AbortProcedureResponse.Builder response = AbortProcedureResponse.newBuilder();</span>
+<span class="source-line-no">1413</span><span id="line-1413">      boolean abortResult =</span>
+<span class="source-line-no">1414</span><span id="line-1414">        server.abortProcedure(request.getProcId(), request.getMayInterruptIfRunning());</span>
+<span class="source-line-no">1415</span><span id="line-1415">      response.setIsProcedureAborted(abortResult);</span>
+<span class="source-line-no">1416</span><span id="line-1416">      return response.build();</span>
+<span class="source-line-no">1417</span><span id="line-1417">    } catch (IOException e) {</span>
+<span class="source-line-no">1418</span><span id="line-1418">      throw new ServiceException(e);</span>
+<span class="source-line-no">1419</span><span id="line-1419">    }</span>
+<span class="source-line-no">1420</span><span id="line-1420">  }</span>
+<span class="source-line-no">1421</span><span id="line-1421"></span>
+<span class="source-line-no">1422</span><span id="line-1422">  @Override</span>
+<span class="source-line-no">1423</span><span id="line-1423">  public ListNamespaceDescriptorsResponse listNamespaceDescriptors(RpcController c,</span>
+<span class="source-line-no">1424</span><span id="line-1424">    ListNamespaceDescriptorsRequest request) throws ServiceException {</span>
+<span class="source-line-no">1425</span><span id="line-1425">    try {</span>
+<span class="source-line-no">1426</span><span id="line-1426">      ListNamespaceDescriptorsResponse.Builder response =</span>
+<span class="source-line-no">1427</span><span id="line-1427">        ListNamespaceDescriptorsResponse.newBuilder();</span>
+<span class="source-line-no">1428</span><span id="line-1428">      for (NamespaceDescriptor ns : server.getNamespaces()) {</span>
+<span class="source-line-no">1429</span><span id="line-1429">        response.addNamespaceDescriptor(ProtobufUtil.toProtoNamespaceDescriptor(ns));</span>
+<span class="source-line-no">1430</span><span id="line-1430">      }</span>
+<span class="source-line-no">1431</span><span id="line-1431">      return response.build();</span>
+<span class="source-line-no">1432</span><span id="line-1432">    } catch (IOException e) {</span>
+<span class="source-line-no">1433</span><span id="line-1433">      throw new ServiceException(e);</span>
+<span class="source-line-no">1434</span><span id="line-1434">    }</span>
+<span class="source-line-no">1435</span><span id="line-1435">  }</span>
+<span class="source-line-no">1436</span><span id="line-1436"></span>
+<span class="source-line-no">1437</span><span id="line-1437">  @Override</span>
+<span class="source-line-no">1438</span><span id="line-1438">  public GetProceduresResponse getProcedures(RpcController rpcController,</span>
+<span class="source-line-no">1439</span><span id="line-1439">    GetProceduresRequest request) throws ServiceException {</span>
+<span class="source-line-no">1440</span><span id="line-1440">    try {</span>
+<span class="source-line-no">1441</span><span id="line-1441">      final GetProceduresResponse.Builder response = GetProceduresResponse.newBuilder();</span>
+<span class="source-line-no">1442</span><span id="line-1442">      for (Procedure&lt;?&gt; p : server.getProcedures()) {</span>
+<span class="source-line-no">1443</span><span id="line-1443">        response.addProcedure(ProcedureUtil.convertToProtoProcedure(p));</span>
+<span class="source-line-no">1444</span><span id="line-1444">      }</span>
+<span class="source-line-no">1445</span><span id="line-1445">      return response.build();</span>
+<span class="source-line-no">1446</span><span id="line-1446">    } catch (IOException e) {</span>
+<span class="source-line-no">1447</span><span id="line-1447">      throw new ServiceException(e);</span>
+<span class="source-line-no">1448</span><span id="line-1448">    }</span>
+<span class="source-line-no">1449</span><span id="line-1449">  }</span>
+<span class="source-line-no">1450</span><span id="line-1450"></span>
+<span class="source-line-no">1451</span><span id="line-1451">  @Override</span>
+<span class="source-line-no">1452</span><span id="line-1452">  public GetLocksResponse getLocks(RpcController controller, GetLocksRequest request)</span>
+<span class="source-line-no">1453</span><span id="line-1453">    throws ServiceException {</span>
+<span class="source-line-no">1454</span><span id="line-1454">    try {</span>
+<span class="source-line-no">1455</span><span id="line-1455">      final GetLocksResponse.Builder builder = GetLocksResponse.newBuilder();</span>
+<span class="source-line-no">1456</span><span id="line-1456"></span>
+<span class="source-line-no">1457</span><span id="line-1457">      for (LockedResource lockedResource : server.getLocks()) {</span>
+<span class="source-line-no">1458</span><span id="line-1458">        builder.addLock(ProcedureUtil.convertToProtoLockedResource(lockedResource));</span>
+<span class="source-line-no">1459</span><span id="line-1459">      }</span>
+<span class="source-line-no">1460</span><span id="line-1460"></span>
+<span class="source-line-no">1461</span><span id="line-1461">      return builder.build();</span>
+<span class="source-line-no">1462</span><span id="line-1462">    } catch (IOException e) {</span>
+<span class="source-line-no">1463</span><span id="line-1463">      throw new ServiceException(e);</span>
+<span class="source-line-no">1464</span><span id="line-1464">    }</span>
+<span class="source-line-no">1465</span><span id="line-1465">  }</span>
+<span class="source-line-no">1466</span><span id="line-1466"></span>
+<span class="source-line-no">1467</span><span id="line-1467">  @Override</span>
+<span class="source-line-no">1468</span><span id="line-1468">  public ListTableDescriptorsByNamespaceResponse listTableDescriptorsByNamespace(RpcController c,</span>
+<span class="source-line-no">1469</span><span id="line-1469">    ListTableDescriptorsByNamespaceRequest request) throws ServiceException {</span>
+<span class="source-line-no">1470</span><span id="line-1470">    try {</span>
+<span class="source-line-no">1471</span><span id="line-1471">      ListTableDescriptorsByNamespaceResponse.Builder b =</span>
+<span class="source-line-no">1472</span><span id="line-1472">        ListTableDescriptorsByNamespaceResponse.newBuilder();</span>
+<span class="source-line-no">1473</span><span id="line-1473">      for (TableDescriptor htd : server</span>
+<span class="source-line-no">1474</span><span id="line-1474">        .listTableDescriptorsByNamespace(request.getNamespaceName())) {</span>
+<span class="source-line-no">1475</span><span id="line-1475">        b.addTableSchema(ProtobufUtil.toTableSchema(htd));</span>
+<span class="source-line-no">1476</span><span id="line-1476">      }</span>
+<span class="source-line-no">1477</span><span id="line-1477">      return b.build();</span>
+<span class="source-line-no">1478</span><span id="line-1478">    } catch (IOException e) {</span>
+<span class="source-line-no">1479</span><span id="line-1479">      throw new ServiceException(e);</span>
+<span class="source-line-no">1480</span><span id="line-1480">    }</span>
+<span class="source-line-no">1481</span><span id="line-1481">  }</span>
+<span class="source-line-no">1482</span><span id="line-1482"></span>
+<span class="source-line-no">1483</span><span id="line-1483">  @Override</span>
+<span class="source-line-no">1484</span><span id="line-1484">  public ListTableNamesByNamespaceResponse listTableNamesByNamespace(RpcController c,</span>
+<span class="source-line-no">1485</span><span id="line-1485">    ListTableNamesByNamespaceRequest request) throws ServiceException {</span>
+<span class="source-line-no">1486</span><span id="line-1486">    try {</span>
+<span class="source-line-no">1487</span><span id="line-1487">      ListTableNamesByNamespaceResponse.Builder b = ListTableNamesByNamespaceResponse.newBuilder();</span>
+<span class="source-line-no">1488</span><span id="line-1488">      for (TableName tableName : server.listTableNamesByNamespace(request.getNamespaceName())) {</span>
+<span class="source-line-no">1489</span><span id="line-1489">        b.addTableName(ProtobufUtil.toProtoTableName(tableName));</span>
+<span class="source-line-no">1490</span><span id="line-1490">      }</span>
+<span class="source-line-no">1491</span><span id="line-1491">      return b.build();</span>
+<span class="source-line-no">1492</span><span id="line-1492">    } catch (IOException e) {</span>
+<span class="source-line-no">1493</span><span id="line-1493">      throw new ServiceException(e);</span>
+<span class="source-line-no">1494</span><span id="line-1494">    }</span>
+<span class="source-line-no">1495</span><span id="line-1495">  }</span>
+<span class="source-line-no">1496</span><span id="line-1496"></span>
+<span class="source-line-no">1497</span><span id="line-1497">  @Override</span>
+<span class="source-line-no">1498</span><span id="line-1498">  public ModifyColumnResponse modifyColumn(RpcController controller, ModifyColumnRequest req)</span>
+<span class="source-line-no">1499</span><span id="line-1499">    throws ServiceException {</span>
+<span class="source-line-no">1500</span><span id="line-1500">    try {</span>
+<span class="source-line-no">1501</span><span id="line-1501">      long procId = server.modifyColumn(ProtobufUtil.toTableName(req.getTableName()),</span>
+<span class="source-line-no">1502</span><span id="line-1502">        ProtobufUtil.toColumnFamilyDescriptor(req.getColumnFamilies()), req.getNonceGroup(),</span>
+<span class="source-line-no">1503</span><span id="line-1503">        req.getNonce());</span>
+<span class="source-line-no">1504</span><span id="line-1504">      if (procId == -1) {</span>
+<span class="source-line-no">1505</span><span id="line-1505">        // This mean operation was not performed in server, so do not set any procId</span>
+<span class="source-line-no">1506</span><span id="line-1506">        return ModifyColumnResponse.newBuilder().build();</span>
+<span class="source-line-no">1507</span><span id="line-1507">      } else {</span>
+<span class="source-line-no">1508</span><span id="line-1508">        return ModifyColumnResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">1509</span><span id="line-1509">      }</span>
+<span class="source-line-no">1510</span><span id="line-1510">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1511</span><span id="line-1511">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1512</span><span id="line-1512">    }</span>
+<span class="source-line-no">1513</span><span id="line-1513">  }</span>
+<span class="source-line-no">1514</span><span id="line-1514"></span>
+<span class="source-line-no">1515</span><span id="line-1515">  @Override</span>
+<span class="source-line-no">1516</span><span id="line-1516">  public ModifyColumnStoreFileTrackerResponse modifyColumnStoreFileTracker(RpcController controller,</span>
+<span class="source-line-no">1517</span><span id="line-1517">    ModifyColumnStoreFileTrackerRequest req) throws ServiceException {</span>
+<span class="source-line-no">1518</span><span id="line-1518">    try {</span>
+<span class="source-line-no">1519</span><span id="line-1519">      long procId =</span>
+<span class="source-line-no">1520</span><span id="line-1520">        server.modifyColumnStoreFileTracker(ProtobufUtil.toTableName(req.getTableName()),</span>
+<span class="source-line-no">1521</span><span id="line-1521">          req.getFamily().toByteArray(), req.getDstSft(), req.getNonceGroup(), req.getNonce());</span>
+<span class="source-line-no">1522</span><span id="line-1522">      return ModifyColumnStoreFileTrackerResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">1523</span><span id="line-1523">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1524</span><span id="line-1524">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1525</span><span id="line-1525">    }</span>
+<span class="source-line-no">1526</span><span id="line-1526">  }</span>
+<span class="source-line-no">1527</span><span id="line-1527"></span>
+<span class="source-line-no">1528</span><span id="line-1528">  @Override</span>
+<span class="source-line-no">1529</span><span id="line-1529">  public ModifyNamespaceResponse modifyNamespace(RpcController controller,</span>
+<span class="source-line-no">1530</span><span id="line-1530">    ModifyNamespaceRequest request) throws ServiceException {</span>
+<span class="source-line-no">1531</span><span id="line-1531">    try {</span>
+<span class="source-line-no">1532</span><span id="line-1532">      long procId =</span>
+<span class="source-line-no">1533</span><span id="line-1533">        server.modifyNamespace(ProtobufUtil.toNamespaceDescriptor(request.getNamespaceDescriptor()),</span>
+<span class="source-line-no">1534</span><span id="line-1534">          request.getNonceGroup(), request.getNonce());</span>
+<span class="source-line-no">1535</span><span id="line-1535">      return ModifyNamespaceResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">1536</span><span id="line-1536">    } catch (IOException e) {</span>
+<span class="source-line-no">1537</span><span id="line-1537">      throw new ServiceException(e);</span>
+<span class="source-line-no">1538</span><span id="line-1538">    }</span>
+<span class="source-line-no">1539</span><span id="line-1539">  }</span>
+<span class="source-line-no">1540</span><span id="line-1540"></span>
+<span class="source-line-no">1541</span><span id="line-1541">  @Override</span>
+<span class="source-line-no">1542</span><span id="line-1542">  public ModifyTableResponse modifyTable(RpcController controller, ModifyTableRequest req)</span>
+<span class="source-line-no">1543</span><span id="line-1543">    throws ServiceException {</span>
+<span class="source-line-no">1544</span><span id="line-1544">    try {</span>
+<span class="source-line-no">1545</span><span id="line-1545">      long procId = server.modifyTable(ProtobufUtil.toTableName(req.getTableName()),</span>
+<span class="source-line-no">1546</span><span id="line-1546">        ProtobufUtil.toTableDescriptor(req.getTableSchema()), req.getNonceGroup(), req.getNonce(),</span>
+<span class="source-line-no">1547</span><span id="line-1547">        req.getReopenRegions());</span>
+<span class="source-line-no">1548</span><span id="line-1548">      return ModifyTableResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">1549</span><span id="line-1549">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1550</span><span id="line-1550">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1551</span><span id="line-1551">    }</span>
+<span class="source-line-no">1552</span><span id="line-1552">  }</span>
+<span class="source-line-no">1553</span><span id="line-1553"></span>
+<span class="source-line-no">1554</span><span id="line-1554">  @Override</span>
+<span class="source-line-no">1555</span><span id="line-1555">  public ModifyTableStoreFileTrackerResponse modifyTableStoreFileTracker(RpcController controller,</span>
+<span class="source-line-no">1556</span><span id="line-1556">    ModifyTableStoreFileTrackerRequest req) throws ServiceException {</span>
+<span class="source-line-no">1557</span><span id="line-1557">    try {</span>
+<span class="source-line-no">1558</span><span id="line-1558">      long procId = server.modifyTableStoreFileTracker(ProtobufUtil.toTableName(req.getTableName()),</span>
+<span class="source-line-no">1559</span><span id="line-1559">        req.getDstSft(), req.getNonceGroup(), req.getNonce());</span>
+<span class="source-line-no">1560</span><span id="line-1560">      return ModifyTableStoreFileTrackerResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">1561</span><span id="line-1561">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1562</span><span id="line-1562">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1563</span><span id="line-1563">    }</span>
+<span class="source-line-no">1564</span><span id="line-1564">  }</span>
+<span class="source-line-no">1565</span><span id="line-1565"></span>
+<span class="source-line-no">1566</span><span id="line-1566">  @Override</span>
+<span class="source-line-no">1567</span><span id="line-1567">  public MoveRegionResponse moveRegion(RpcController controller, MoveRegionRequest req)</span>
+<span class="source-line-no">1568</span><span id="line-1568">    throws ServiceException {</span>
+<span class="source-line-no">1569</span><span id="line-1569">    final byte[] encodedRegionName = req.getRegion().getValue().toByteArray();</span>
+<span class="source-line-no">1570</span><span id="line-1570">    RegionSpecifierType type = req.getRegion().getType();</span>
+<span class="source-line-no">1571</span><span id="line-1571">    final byte[] destServerName = (req.hasDestServerName())</span>
+<span class="source-line-no">1572</span><span id="line-1572">      ? Bytes.toBytes(ProtobufUtil.toServerName(req.getDestServerName()).getServerName())</span>
+<span class="source-line-no">1573</span><span id="line-1573">      : null;</span>
+<span class="source-line-no">1574</span><span id="line-1574">    MoveRegionResponse mrr = MoveRegionResponse.newBuilder().build();</span>
+<span class="source-line-no">1575</span><span id="line-1575"></span>
+<span class="source-line-no">1576</span><span id="line-1576">    if (type != RegionSpecifierType.ENCODED_REGION_NAME) {</span>
+<span class="source-line-no">1577</span><span id="line-1577">      LOG.warn("moveRegion specifier type: expected: " + RegionSpecifierType.ENCODED_REGION_NAME</span>
+<span class="source-line-no">1578</span><span id="line-1578">        + " actual: " + type);</span>
+<span class="source-line-no">1579</span><span id="line-1579">    }</span>
+<span class="source-line-no">1580</span><span id="line-1580"></span>
+<span class="source-line-no">1581</span><span id="line-1581">    try {</span>
+<span class="source-line-no">1582</span><span id="line-1582">      server.checkInitialized();</span>
+<span class="source-line-no">1583</span><span id="line-1583">      server.move(encodedRegionName, destServerName);</span>
+<span class="source-line-no">1584</span><span id="line-1584">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1585</span><span id="line-1585">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1586</span><span id="line-1586">    }</span>
+<span class="source-line-no">1587</span><span id="line-1587">    return mrr;</span>
+<span class="source-line-no">1588</span><span id="line-1588">  }</span>
+<span class="source-line-no">1589</span><span id="line-1589"></span>
+<span class="source-line-no">1590</span><span id="line-1590">  /**</span>
+<span class="source-line-no">1591</span><span id="line-1591">   * Offline specified region from master's in-memory state. It will not attempt to reassign the</span>
+<span class="source-line-no">1592</span><span id="line-1592">   * region as in unassign. This is a special method that should be used by experts or hbck.</span>
+<span class="source-line-no">1593</span><span id="line-1593">   */</span>
+<span class="source-line-no">1594</span><span id="line-1594">  @Override</span>
+<span class="source-line-no">1595</span><span id="line-1595">  public OfflineRegionResponse offlineRegion(RpcController controller, OfflineRegionRequest request)</span>
+<span class="source-line-no">1596</span><span id="line-1596">    throws ServiceException {</span>
+<span class="source-line-no">1597</span><span id="line-1597">    try {</span>
+<span class="source-line-no">1598</span><span id="line-1598">      server.checkInitialized();</span>
+<span class="source-line-no">1599</span><span id="line-1599"></span>
+<span class="source-line-no">1600</span><span id="line-1600">      final RegionSpecifierType type = request.getRegion().getType();</span>
+<span class="source-line-no">1601</span><span id="line-1601">      if (type != RegionSpecifierType.REGION_NAME) {</span>
+<span class="source-line-no">1602</span><span id="line-1602">        LOG.warn("moveRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span>
+<span class="source-line-no">1603</span><span id="line-1603">          + " actual: " + type);</span>
+<span class="source-line-no">1604</span><span id="line-1604">      }</span>
+<span class="source-line-no">1605</span><span id="line-1605"></span>
+<span class="source-line-no">1606</span><span id="line-1606">      final byte[] regionName = request.getRegion().getValue().toByteArray();</span>
+<span class="source-line-no">1607</span><span id="line-1607">      final RegionInfo hri = server.getAssignmentManager().getRegionInfo(regionName);</span>
+<span class="source-line-no">1608</span><span id="line-1608">      if (hri == null) {</span>
+<span class="source-line-no">1609</span><span id="line-1609">        throw new UnknownRegionException(Bytes.toStringBinary(regionName));</span>
+<span class="source-line-no">1610</span><span id="line-1610">      }</span>
+<span class="source-line-no">1611</span><span id="line-1611"></span>
+<span class="source-line-no">1612</span><span id="line-1612">      if (server.cpHost != null) {</span>
+<span class="source-line-no">1613</span><span id="line-1613">        server.cpHost.preRegionOffline(hri);</span>
+<span class="source-line-no">1614</span><span id="line-1614">      }</span>
+<span class="source-line-no">1615</span><span id="line-1615">      LOG.info(server.getClientIdAuditPrefix() + " offline " + hri.getRegionNameAsString());</span>
+<span class="source-line-no">1616</span><span id="line-1616">      server.getAssignmentManager().offlineRegion(hri);</span>
+<span class="source-line-no">1617</span><span id="line-1617">      if (server.cpHost != null) {</span>
+<span class="source-line-no">1618</span><span id="line-1618">        server.cpHost.postRegionOffline(hri);</span>
+<span class="source-line-no">1619</span><span id="line-1619">      }</span>
+<span class="source-line-no">1620</span><span id="line-1620">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1621</span><span id="line-1621">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1622</span><span id="line-1622">    }</span>
+<span class="source-line-no">1623</span><span id="line-1623">    return OfflineRegionResponse.newBuilder().build();</span>
+<span class="source-line-no">1624</span><span id="line-1624">  }</span>
+<span class="source-line-no">1625</span><span id="line-1625"></span>
+<span class="source-line-no">1626</span><span id="line-1626">  /**</span>
+<span class="source-line-no">1627</span><span id="line-1627">   * Execute Restore/Clone snapshot operation.</span>
+<span class="source-line-no">1628</span><span id="line-1628">   * &lt;p&gt;</span>
+<span class="source-line-no">1629</span><span id="line-1629">   * If the specified table exists a "Restore" is executed, replacing the table schema and directory</span>
+<span class="source-line-no">1630</span><span id="line-1630">   * data with the content of the snapshot. The table must be disabled, or a</span>
+<span class="source-line-no">1631</span><span id="line-1631">   * UnsupportedOperationException will be thrown.</span>
+<span class="source-line-no">1632</span><span id="line-1632">   * &lt;p&gt;</span>
+<span class="source-line-no">1633</span><span id="line-1633">   * If the table doesn't exist a "Clone" is executed, a new table is created using the schema at</span>
+<span class="source-line-no">1634</span><span id="line-1634">   * the time of the snapshot, and the content of the snapshot.</span>
+<span class="source-line-no">1635</span><span id="line-1635">   * &lt;p&gt;</span>
+<span class="source-line-no">1636</span><span id="line-1636">   * The restore/clone operation does not require copying HFiles. Since HFiles are immutable the</span>
+<span class="source-line-no">1637</span><span id="line-1637">   * table can point to and use the same files as the original one.</span>
+<span class="source-line-no">1638</span><span id="line-1638">   */</span>
+<span class="source-line-no">1639</span><span id="line-1639">  @Override</span>
+<span class="source-line-no">1640</span><span id="line-1640">  public RestoreSnapshotResponse restoreSnapshot(RpcController controller,</span>
+<span class="source-line-no">1641</span><span id="line-1641">    RestoreSnapshotRequest request) throws ServiceException {</span>
+<span class="source-line-no">1642</span><span id="line-1642">    try {</span>
+<span class="source-line-no">1643</span><span id="line-1643">      long procId = server.restoreSnapshot(request.getSnapshot(), request.getNonceGroup(),</span>
+<span class="source-line-no">1644</span><span id="line-1644">        request.getNonce(), request.getRestoreACL(), request.getCustomSFT());</span>
+<span class="source-line-no">1645</span><span id="line-1645">      return RestoreSnapshotResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">1646</span><span id="line-1646">    } catch (ForeignException e) {</span>
+<span class="source-line-no">1647</span><span id="line-1647">      throw new ServiceException(e.getCause());</span>
+<span class="source-line-no">1648</span><span id="line-1648">    } catch (IOException e) {</span>
+<span class="source-line-no">1649</span><span id="line-1649">      throw new ServiceException(e);</span>
+<span class="source-line-no">1650</span><span id="line-1650">    }</span>
+<span class="source-line-no">1651</span><span id="line-1651">  }</span>
+<span class="source-line-no">1652</span><span id="line-1652"></span>
+<span class="source-line-no">1653</span><span id="line-1653">  @Override</span>
+<span class="source-line-no">1654</span><span id="line-1654">  public SetSnapshotCleanupResponse switchSnapshotCleanup(RpcController controller,</span>
+<span class="source-line-no">1655</span><span id="line-1655">    SetSnapshotCleanupRequest request) throws ServiceException {</span>
+<span class="source-line-no">1656</span><span id="line-1656">    try {</span>
+<span class="source-line-no">1657</span><span id="line-1657">      server.checkInitialized();</span>
+<span class="source-line-no">1658</span><span id="line-1658">      final boolean enabled = request.getEnabled();</span>
+<span class="source-line-no">1659</span><span id="line-1659">      final boolean isSynchronous = request.hasSynchronous() &amp;&amp; request.getSynchronous();</span>
+<span class="source-line-no">1660</span><span id="line-1660">      final boolean prevSnapshotCleanupRunning = this.switchSnapshotCleanup(enabled, isSynchronous);</span>
+<span class="source-line-no">1661</span><span id="line-1661">      return SetSnapshotCleanupResponse.newBuilder()</span>
+<span class="source-line-no">1662</span><span id="line-1662">        .setPrevSnapshotCleanup(prevSnapshotCleanupRunning).build();</span>
+<span class="source-line-no">1663</span><span id="line-1663">    } catch (IOException e) {</span>
+<span class="source-line-no">1664</span><span id="line-1664">      throw new ServiceException(e);</span>
+<span class="source-line-no">1665</span><span id="line-1665">    }</span>
+<span class="source-line-no">1666</span><span id="line-1666">  }</span>
+<span class="source-line-no">1667</span><span id="line-1667"></span>
+<span class="source-line-no">1668</span><span id="line-1668">  @Override</span>
+<span class="source-line-no">1669</span><span id="line-1669">  public IsSnapshotCleanupEnabledResponse isSnapshotCleanupEnabled(RpcController controller,</span>
+<span class="source-line-no">1670</span><span id="line-1670">    IsSnapshotCleanupEnabledRequest request) throws ServiceException {</span>
+<span class="source-line-no">1671</span><span id="line-1671">    try {</span>
+<span class="source-line-no">1672</span><span id="line-1672">      server.checkInitialized();</span>
+<span class="source-line-no">1673</span><span id="line-1673">      final boolean isSnapshotCleanupEnabled = server.snapshotCleanupStateStore.get();</span>
+<span class="source-line-no">1674</span><span id="line-1674">      return IsSnapshotCleanupEnabledResponse.newBuilder().setEnabled(isSnapshotCleanupEnabled)</span>
+<span class="source-line-no">1675</span><span id="line-1675">        .build();</span>
+<span class="source-line-no">1676</span><span id="line-1676">    } catch (IOException e) {</span>
+<span class="source-line-no">1677</span><span id="line-1677">      throw new ServiceException(e);</span>
+<span class="source-line-no">1678</span><span id="line-1678">    }</span>
+<span class="source-line-no">1679</span><span id="line-1679">  }</span>
+<span class="source-line-no">1680</span><span id="line-1680"></span>
+<span class="source-line-no">1681</span><span id="line-1681">  /**</span>
+<span class="source-line-no">1682</span><span id="line-1682">   * Turn on/off snapshot auto-cleanup based on TTL</span>
+<span class="source-line-no">1683</span><span id="line-1683">   * @param enabledNewVal Set to &lt;code&gt;true&lt;/code&gt; to enable, &lt;code&gt;false&lt;/code&gt; to disable</span>
+<span class="source-line-no">1684</span><span id="line-1684">   * @param synchronous   If &lt;code&gt;true&lt;/code&gt;, it waits until current snapshot cleanup is</span>
+<span class="source-line-no">1685</span><span id="line-1685">   *                      completed, if outstanding</span>
+<span class="source-line-no">1686</span><span id="line-1686">   * @return previous snapshot auto-cleanup mode</span>
+<span class="source-line-no">1687</span><span id="line-1687">   */</span>
+<span class="source-line-no">1688</span><span id="line-1688">  private synchronized boolean switchSnapshotCleanup(final boolean enabledNewVal,</span>
+<span class="source-line-no">1689</span><span id="line-1689">    final boolean synchronous) throws IOException {</span>
+<span class="source-line-no">1690</span><span id="line-1690">    final boolean oldValue = server.snapshotCleanupStateStore.get();</span>
+<span class="source-line-no">1691</span><span id="line-1691">    server.switchSnapshotCleanup(enabledNewVal, synchronous);</span>
+<span class="source-line-no">1692</span><span id="line-1692">    LOG.info("{} Successfully set snapshot cleanup to {}", server.getClientIdAuditPrefix(),</span>
+<span class="source-line-no">1693</span><span id="line-1693">      enabledNewVal);</span>
+<span class="source-line-no">1694</span><span id="line-1694">    return oldValue;</span>
+<span class="source-line-no">1695</span><span id="line-1695">  }</span>
+<span class="source-line-no">1696</span><span id="line-1696"></span>
+<span class="source-line-no">1697</span><span id="line-1697">  @Override</span>
+<span class="source-line-no">1698</span><span id="line-1698">  public RunCatalogScanResponse runCatalogScan(RpcController c, RunCatalogScanRequest req)</span>
+<span class="source-line-no">1699</span><span id="line-1699">    throws ServiceException {</span>
+<span class="source-line-no">1700</span><span id="line-1700">    rpcPreCheck("runCatalogScan");</span>
+<span class="source-line-no">1701</span><span id="line-1701">    try {</span>
+<span class="source-line-no">1702</span><span id="line-1702">      return ResponseConverter.buildRunCatalogScanResponse(this.server.catalogJanitorChore.scan());</span>
+<span class="source-line-no">1703</span><span id="line-1703">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1704</span><span id="line-1704">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1705</span><span id="line-1705">    }</span>
+<span class="source-line-no">1706</span><span id="line-1706">  }</span>
+<span class="source-line-no">1707</span><span id="line-1707"></span>
+<span class="source-line-no">1708</span><span id="line-1708">  @Override</span>
+<span class="source-line-no">1709</span><span id="line-1709">  public RunCleanerChoreResponse runCleanerChore(RpcController c, RunCleanerChoreRequest req)</span>
+<span class="source-line-no">1710</span><span id="line-1710">    throws ServiceException {</span>
+<span class="source-line-no">1711</span><span id="line-1711">    rpcPreCheck("runCleanerChore");</span>
+<span class="source-line-no">1712</span><span id="line-1712">    try {</span>
+<span class="source-line-no">1713</span><span id="line-1713">      CompletableFuture&lt;Boolean&gt; fileCleanerFuture = server.getHFileCleaner().triggerCleanerNow();</span>
+<span class="source-line-no">1714</span><span id="line-1714">      CompletableFuture&lt;Boolean&gt; logCleanerFuture = server.getLogCleaner().triggerCleanerNow();</span>
+<span class="source-line-no">1715</span><span id="line-1715">      boolean result = fileCleanerFuture.get() &amp;&amp; logCleanerFuture.get();</span>
+<span class="source-line-no">1716</span><span id="line-1716">      return ResponseConverter.buildRunCleanerChoreResponse(result);</span>
+<span class="source-line-no">1717</span><span id="line-1717">    } catch (InterruptedException e) {</span>
+<span class="source-line-no">1718</span><span id="line-1718">      throw new ServiceException(e);</span>
+<span class="source-line-no">1719</span><span id="line-1719">    } catch (ExecutionException e) {</span>
+<span class="source-line-no">1720</span><span id="line-1720">      throw new ServiceException(e.getCause());</span>
+<span class="source-line-no">1721</span><span id="line-1721">    }</span>
+<span class="source-line-no">1722</span><span id="line-1722">  }</span>
+<span class="source-line-no">1723</span><span id="line-1723"></span>
+<span class="source-line-no">1724</span><span id="line-1724">  @Override</span>
+<span class="source-line-no">1725</span><span id="line-1725">  public SetBalancerRunningResponse setBalancerRunning(RpcController c,</span>
+<span class="source-line-no">1726</span><span id="line-1726">    SetBalancerRunningRequest req) throws ServiceException {</span>
+<span class="source-line-no">1727</span><span id="line-1727">    try {</span>
+<span class="source-line-no">1728</span><span id="line-1728">      server.checkInitialized();</span>
+<span class="source-line-no">1729</span><span id="line-1729">      boolean prevValue = (req.getSynchronous())</span>
+<span class="source-line-no">1730</span><span id="line-1730">        ? synchronousBalanceSwitch(req.getOn())</span>
+<span class="source-line-no">1731</span><span id="line-1731">        : server.balanceSwitch(req.getOn());</span>
+<span class="source-line-no">1732</span><span id="line-1732">      return SetBalancerRunningResponse.newBuilder().setPrevBalanceValue(prevValue).build();</span>
+<span class="source-line-no">1733</span><span id="line-1733">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1734</span><span id="line-1734">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1735</span><span id="line-1735">    }</span>
+<span class="source-line-no">1736</span><span id="line-1736">  }</span>
+<span class="source-line-no">1737</span><span id="line-1737"></span>
+<span class="source-line-no">1738</span><span id="line-1738">  @Override</span>
+<span class="source-line-no">1739</span><span id="line-1739">  public ShutdownResponse shutdown(RpcController controller, ShutdownRequest request)</span>
+<span class="source-line-no">1740</span><span id="line-1740">    throws ServiceException {</span>
+<span class="source-line-no">1741</span><span id="line-1741">    LOG.info(server.getClientIdAuditPrefix() + " shutdown");</span>
+<span class="source-line-no">1742</span><span id="line-1742">    try {</span>
+<span class="source-line-no">1743</span><span id="line-1743">      server.shutdown();</span>
+<span class="source-line-no">1744</span><span id="line-1744">    } catch (IOException e) {</span>
+<span class="source-line-no">1745</span><span id="line-1745">      LOG.error("Exception occurred in HMaster.shutdown()", e);</span>
+<span class="source-line-no">1746</span><span id="line-1746">      throw new ServiceException(e);</span>
+<span class="source-line-no">1747</span><span id="line-1747">    }</span>
+<span class="source-line-no">1748</span><span id="line-1748">    return ShutdownResponse.newBuilder().build();</span>
+<span class="source-line-no">1749</span><span id="line-1749">  }</span>
+<span class="source-line-no">1750</span><span id="line-1750"></span>
+<span class="source-line-no">1751</span><span id="line-1751">  /**</span>
+<span class="source-line-no">1752</span><span id="line-1752">   * Triggers an asynchronous attempt to take a snapshot. {@inheritDoc}</span>
+<span class="source-line-no">1753</span><span id="line-1753">   */</span>
+<span class="source-line-no">1754</span><span id="line-1754">  @Override</span>
+<span class="source-line-no">1755</span><span id="line-1755">  public SnapshotResponse snapshot(RpcController controller, SnapshotRequest request)</span>
+<span class="source-line-no">1756</span><span id="line-1756">    throws ServiceException {</span>
+<span class="source-line-no">1757</span><span id="line-1757">    try {</span>
+<span class="source-line-no">1758</span><span id="line-1758">      server.checkInitialized();</span>
+<span class="source-line-no">1759</span><span id="line-1759">      server.snapshotManager.checkSnapshotSupport();</span>
+<span class="source-line-no">1760</span><span id="line-1760"></span>
+<span class="source-line-no">1761</span><span id="line-1761">      LOG.info(server.getClientIdAuditPrefix() + " snapshot request for:"</span>
+<span class="source-line-no">1762</span><span id="line-1762">        + ClientSnapshotDescriptionUtils.toString(request.getSnapshot()));</span>
+<span class="source-line-no">1763</span><span id="line-1763">      // get the snapshot information</span>
+<span class="source-line-no">1764</span><span id="line-1764">      SnapshotDescription snapshot =</span>
+<span class="source-line-no">1765</span><span id="line-1765">        SnapshotDescriptionUtils.validate(request.getSnapshot(), server.getConfiguration());</span>
+<span class="source-line-no">1766</span><span id="line-1766">      // send back the max amount of time the client should wait for the snapshot to complete</span>
+<span class="source-line-no">1767</span><span id="line-1767">      long waitTime = SnapshotDescriptionUtils.getMaxMasterTimeout(server.getConfiguration(),</span>
+<span class="source-line-no">1768</span><span id="line-1768">        snapshot.getType(), SnapshotDescriptionUtils.DEFAULT_MAX_WAIT_TIME);</span>
+<span class="source-line-no">1769</span><span id="line-1769"></span>
+<span class="source-line-no">1770</span><span id="line-1770">      SnapshotResponse.Builder builder = SnapshotResponse.newBuilder().setExpectedTimeout(waitTime);</span>
 <span class="source-line-no">1771</span><span id="line-1771"></span>
-<span class="source-line-no">1772</span><span id="line-1772">      SnapshotResponse.Builder builder = SnapshotResponse.newBuilder().setExpectedTimeout(waitTime);</span>
-<span class="source-line-no">1773</span><span id="line-1773"></span>
-<span class="source-line-no">1774</span><span id="line-1774">      // If there is nonce group and nonce in the snapshot request, then the client can</span>
-<span class="source-line-no">1775</span><span id="line-1775">      // handle snapshot procedure procId. And if enable the snapshot procedure, we</span>
-<span class="source-line-no">1776</span><span id="line-1776">      // will do the snapshot work with proc-v2, otherwise we will fall back to zk proc.</span>
-<span class="source-line-no">1777</span><span id="line-1777">      if (</span>
-<span class="source-line-no">1778</span><span id="line-1778">        request.hasNonceGroup() &amp;&amp; request.hasNonce()</span>
-<span class="source-line-no">1779</span><span id="line-1779">          &amp;&amp; server.snapshotManager.snapshotProcedureEnabled()</span>
-<span class="source-line-no">1780</span><span id="line-1780">      ) {</span>
-<span class="source-line-no">1781</span><span id="line-1781">        long nonceGroup = request.getNonceGroup();</span>
-<span class="source-line-no">1782</span><span id="line-1782">        long nonce = request.getNonce();</span>
-<span class="source-line-no">1783</span><span id="line-1783">        long procId = server.snapshotManager.takeSnapshot(snapshot, nonceGroup, nonce);</span>
-<span class="source-line-no">1784</span><span id="line-1784">        return builder.setProcId(procId).build();</span>
-<span class="source-line-no">1785</span><span id="line-1785">      } else {</span>
-<span class="source-line-no">1786</span><span id="line-1786">        server.snapshotManager.takeSnapshot(snapshot);</span>
-<span class="source-line-no">1787</span><span id="line-1787">        return builder.build();</span>
-<span class="source-line-no">1788</span><span id="line-1788">      }</span>
-<span class="source-line-no">1789</span><span id="line-1789">    } catch (ForeignException e) {</span>
-<span class="source-line-no">1790</span><span id="line-1790">      throw new ServiceException(e.getCause());</span>
-<span class="source-line-no">1791</span><span id="line-1791">    } catch (IOException e) {</span>
-<span class="source-line-no">1792</span><span id="line-1792">      throw new ServiceException(e);</span>
-<span class="source-line-no">1793</span><span id="line-1793">    }</span>
-<span class="source-line-no">1794</span><span id="line-1794">  }</span>
-<span class="source-line-no">1795</span><span id="line-1795"></span>
-<span class="source-line-no">1796</span><span id="line-1796">  @Override</span>
-<span class="source-line-no">1797</span><span id="line-1797">  public StopMasterResponse stopMaster(RpcController controller, StopMasterRequest request)</span>
-<span class="source-line-no">1798</span><span id="line-1798">    throws ServiceException {</span>
-<span class="source-line-no">1799</span><span id="line-1799">    LOG.info(server.getClientIdAuditPrefix() + " stop");</span>
-<span class="source-line-no">1800</span><span id="line-1800">    try {</span>
-<span class="source-line-no">1801</span><span id="line-1801">      server.stopMaster();</span>
-<span class="source-line-no">1802</span><span id="line-1802">    } catch (IOException e) {</span>
-<span class="source-line-no">1803</span><span id="line-1803">      LOG.error("Exception occurred while stopping master", e);</span>
-<span class="source-line-no">1804</span><span id="line-1804">      throw new ServiceException(e);</span>
-<span class="source-line-no">1805</span><span id="line-1805">    }</span>
-<span class="source-line-no">1806</span><span id="line-1806">    return StopMasterResponse.newBuilder().build();</span>
-<span class="source-line-no">1807</span><span id="line-1807">  }</span>
-<span class="source-line-no">1808</span><span id="line-1808"></span>
-<span class="source-line-no">1809</span><span id="line-1809">  @Override</span>
-<span class="source-line-no">1810</span><span id="line-1810">  public IsInMaintenanceModeResponse isMasterInMaintenanceMode(final RpcController controller,</span>
-<span class="source-line-no">1811</span><span id="line-1811">    final IsInMaintenanceModeRequest request) throws ServiceException {</span>
-<span class="source-line-no">1812</span><span id="line-1812">    IsInMaintenanceModeResponse.Builder response = IsInMaintenanceModeResponse.newBuilder();</span>
-<span class="source-line-no">1813</span><span id="line-1813">    response.setInMaintenanceMode(server.isInMaintenanceMode());</span>
-<span class="source-line-no">1814</span><span id="line-1814">    return response.build();</span>
-<span class="source-line-no">1815</span><span id="line-1815">  }</span>
-<span class="source-line-no">1816</span><span id="line-1816"></span>
-<span class="source-line-no">1817</span><span id="line-1817">  @Override</span>
-<span class="source-line-no">1818</span><span id="line-1818">  public UnassignRegionResponse unassignRegion(RpcController controller, UnassignRegionRequest req)</span>
-<span class="source-line-no">1819</span><span id="line-1819">    throws ServiceException {</span>
-<span class="source-line-no">1820</span><span id="line-1820">    try {</span>
-<span class="source-line-no">1821</span><span id="line-1821">      final byte[] regionName = req.getRegion().getValue().toByteArray();</span>
-<span class="source-line-no">1822</span><span id="line-1822">      RegionSpecifierType type = req.getRegion().getType();</span>
-<span class="source-line-no">1823</span><span id="line-1823">      UnassignRegionResponse urr = UnassignRegionResponse.newBuilder().build();</span>
-<span class="source-line-no">1824</span><span id="line-1824"></span>
-<span class="source-line-no">1825</span><span id="line-1825">      server.checkInitialized();</span>
-<span class="source-line-no">1826</span><span id="line-1826">      if (type != RegionSpecifierType.REGION_NAME) {</span>
-<span class="source-line-no">1827</span><span id="line-1827">        LOG.warn("unassignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span>
-<span class="source-line-no">1828</span><span id="line-1828">          + " actual: " + type);</span>
-<span class="source-line-no">1829</span><span id="line-1829">      }</span>
-<span class="source-line-no">1830</span><span id="line-1830">      RegionStateNode rsn =</span>
-<span class="source-line-no">1831</span><span id="line-1831">        server.getAssignmentManager().getRegionStates().getRegionStateNodeFromName(regionName);</span>
-<span class="source-line-no">1832</span><span id="line-1832">      if (rsn == null) {</span>
-<span class="source-line-no">1833</span><span id="line-1833">        throw new UnknownRegionException(Bytes.toString(regionName));</span>
-<span class="source-line-no">1834</span><span id="line-1834">      }</span>
-<span class="source-line-no">1835</span><span id="line-1835"></span>
-<span class="source-line-no">1836</span><span id="line-1836">      RegionInfo hri = rsn.getRegionInfo();</span>
-<span class="source-line-no">1837</span><span id="line-1837">      if (server.cpHost != null) {</span>
-<span class="source-line-no">1838</span><span id="line-1838">        server.cpHost.preUnassign(hri);</span>
-<span class="source-line-no">1839</span><span id="line-1839">      }</span>
-<span class="source-line-no">1840</span><span id="line-1840">      LOG.debug(server.getClientIdAuditPrefix() + " unassign " + hri.getRegionNameAsString()</span>
-<span class="source-line-no">1841</span><span id="line-1841">        + " in current location if it is online");</span>
-<span class="source-line-no">1842</span><span id="line-1842">      server.getAssignmentManager().unassign(hri);</span>
-<span class="source-line-no">1843</span><span id="line-1843">      if (server.cpHost != null) {</span>
-<span class="source-line-no">1844</span><span id="line-1844">        server.cpHost.postUnassign(hri);</span>
-<span class="source-line-no">1845</span><span id="line-1845">      }</span>
-<span class="source-line-no">1846</span><span id="line-1846"></span>
-<span class="source-line-no">1847</span><span id="line-1847">      return urr;</span>
-<span class="source-line-no">1848</span><span id="line-1848">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1849</span><span id="line-1849">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1850</span><span id="line-1850">    }</span>
-<span class="source-line-no">1851</span><span id="line-1851">  }</span>
-<span class="source-line-no">1852</span><span id="line-1852"></span>
-<span class="source-line-no">1853</span><span id="line-1853">  @Override</span>
-<span class="source-line-no">1854</span><span id="line-1854">  public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c,</span>
-<span class="source-line-no">1855</span><span id="line-1855">    ReportRegionStateTransitionRequest req) throws ServiceException {</span>
-<span class="source-line-no">1856</span><span id="line-1856">    try {</span>
-<span class="source-line-no">1857</span><span id="line-1857">      server.checkServiceStarted();</span>
-<span class="source-line-no">1858</span><span id="line-1858">      for (RegionServerStatusProtos.RegionStateTransition transition : req.getTransitionList()) {</span>
-<span class="source-line-no">1859</span><span id="line-1859">        long procId =</span>
-<span class="source-line-no">1860</span><span id="line-1860">          transition.getProcIdCount() &gt; 0 ? transition.getProcId(0) : Procedure.NO_PROC_ID;</span>
-<span class="source-line-no">1861</span><span id="line-1861">        // -1 is less than any possible MasterActiveCode</span>
-<span class="source-line-no">1862</span><span id="line-1862">        long initiatingMasterActiveTime = transition.hasInitiatingMasterActiveTime()</span>
-<span class="source-line-no">1863</span><span id="line-1863">          ? transition.getInitiatingMasterActiveTime()</span>
-<span class="source-line-no">1864</span><span id="line-1864">          : -1;</span>
-<span class="source-line-no">1865</span><span id="line-1865">        throwOnOldMaster(procId, initiatingMasterActiveTime);</span>
-<span class="source-line-no">1866</span><span id="line-1866">      }</span>
-<span class="source-line-no">1867</span><span id="line-1867">      return server.getAssignmentManager().reportRegionStateTransition(req);</span>
-<span class="source-line-no">1868</span><span id="line-1868">    } catch (IOException ioe) {</span>
-<span class="source-line-no">1869</span><span id="line-1869">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">1870</span><span id="line-1870">    }</span>
-<span class="source-line-no">1871</span><span id="line-1871">  }</span>
-<span class="source-line-no">1872</span><span id="line-1872"></span>
-<span class="source-line-no">1873</span><span id="line-1873">  @Override</span>
-<span class="source-line-no">1874</span><span id="line-1874">  public SetQuotaResponse setQuota(RpcController c, SetQuotaRequest req) throws ServiceException {</span>
-<span class="source-line-no">1875</span><span id="line-1875">    try {</span>
-<span class="source-line-no">1876</span><span id="line-1876">      server.checkInitialized();</span>
-<span class="source-line-no">1877</span><span id="line-1877">      return server.getMasterQuotaManager().setQuota(req);</span>
-<span class="source-line-no">1878</span><span id="line-1878">    } catch (Exception e) {</span>
-<span class="source-line-no">1879</span><span id="line-1879">      throw new ServiceException(e);</span>
-<span class="source-line-no">1880</span><span id="line-1880">    }</span>
-<span class="source-line-no">1881</span><span id="line-1881">  }</span>
-<span class="source-line-no">1882</span><span id="line-1882"></span>
-<span class="source-line-no">1883</span><span id="line-1883">  @Override</span>
-<span class="source-line-no">1884</span><span id="line-1884">  public MajorCompactionTimestampResponse getLastMajorCompactionTimestamp(RpcController controller,</span>
-<span class="source-line-no">1885</span><span id="line-1885">    MajorCompactionTimestampRequest request) throws ServiceException {</span>
-<span class="source-line-no">1886</span><span id="line-1886">    MajorCompactionTimestampResponse.Builder response =</span>
-<span class="source-line-no">1887</span><span id="line-1887">      MajorCompactionTimestampResponse.newBuilder();</span>
-<span class="source-line-no">1888</span><span id="line-1888">    try {</span>
-<span class="source-line-no">1889</span><span id="line-1889">      server.checkInitialized();</span>
-<span class="source-line-no">1890</span><span id="line-1890">      response.setCompactionTimestamp(</span>
-<span class="source-line-no">1891</span><span id="line-1891">        server.getLastMajorCompactionTimestamp(ProtobufUtil.toTableName(request.getTableName())));</span>
-<span class="source-line-no">1892</span><span id="line-1892">    } catch (IOException e) {</span>
-<span class="source-line-no">1893</span><span id="line-1893">      throw new ServiceException(e);</span>
-<span class="source-line-no">1894</span><span id="line-1894">    }</span>
-<span class="source-line-no">1895</span><span id="line-1895">    return response.build();</span>
-<span class="source-line-no">1896</span><span id="line-1896">  }</span>
-<span class="source-line-no">1897</span><span id="line-1897"></span>
-<span class="source-line-no">1898</span><span id="line-1898">  @Override</span>
-<span class="source-line-no">1899</span><span id="line-1899">  public MajorCompactionTimestampResponse getLastMajorCompactionTimestampForRegion(</span>
-<span class="source-line-no">1900</span><span id="line-1900">    RpcController controller, MajorCompactionTimestampForRegionRequest request)</span>
-<span class="source-line-no">1901</span><span id="line-1901">    throws ServiceException {</span>
-<span class="source-line-no">1902</span><span id="line-1902">    MajorCompactionTimestampResponse.Builder response =</span>
-<span class="source-line-no">1903</span><span id="line-1903">      MajorCompactionTimestampResponse.newBuilder();</span>
-<span class="source-line-no">1904</span><span id="line-1904">    try {</span>
-<span class="source-line-no">1905</span><span id="line-1905">      server.checkInitialized();</span>
-<span class="source-line-no">1906</span><span id="line-1906">      response.setCompactionTimestamp(server</span>
-<span class="source-line-no">1907</span><span id="line-1907">        .getLastMajorCompactionTimestampForRegion(request.getRegion().getValue().toByteArray()));</span>
-<span class="source-line-no">1908</span><span id="line-1908">    } catch (IOException e) {</span>
-<span class="source-line-no">1909</span><span id="line-1909">      throw new ServiceException(e);</span>
-<span class="source-line-no">1910</span><span id="line-1910">    }</span>
-<span class="source-line-no">1911</span><span id="line-1911">    return response.build();</span>
-<span class="source-line-no">1912</span><span id="line-1912">  }</span>
-<span class="source-line-no">1913</span><span id="line-1913"></span>
-<span class="source-line-no">1914</span><span id="line-1914">  @Override</span>
-<span class="source-line-no">1915</span><span id="line-1915">  public IsBalancerEnabledResponse isBalancerEnabled(RpcController controller,</span>
-<span class="source-line-no">1916</span><span id="line-1916">    IsBalancerEnabledRequest request) throws ServiceException {</span>
-<span class="source-line-no">1917</span><span id="line-1917">    IsBalancerEnabledResponse.Builder response = IsBalancerEnabledResponse.newBuilder();</span>
-<span class="source-line-no">1918</span><span id="line-1918">    response.setEnabled(server.isBalancerOn());</span>
-<span class="source-line-no">1919</span><span id="line-1919">    return response.build();</span>
-<span class="source-line-no">1920</span><span id="line-1920">  }</span>
-<span class="source-line-no">1921</span><span id="line-1921"></span>
-<span class="source-line-no">1922</span><span id="line-1922">  @Override</span>
-<span class="source-line-no">1923</span><span id="line-1923">  public SetSplitOrMergeEnabledResponse setSplitOrMergeEnabled(RpcController controller,</span>
-<span class="source-line-no">1924</span><span id="line-1924">    SetSplitOrMergeEnabledRequest request) throws ServiceException {</span>
-<span class="source-line-no">1925</span><span id="line-1925">    SetSplitOrMergeEnabledResponse.Builder response = SetSplitOrMergeEnabledResponse.newBuilder();</span>
-<span class="source-line-no">1926</span><span id="line-1926">    try {</span>
-<span class="source-line-no">1927</span><span id="line-1927">      server.checkInitialized();</span>
-<span class="source-line-no">1928</span><span id="line-1928">      boolean newValue = request.getEnabled();</span>
-<span class="source-line-no">1929</span><span id="line-1929">      for (MasterProtos.MasterSwitchType masterSwitchType : request.getSwitchTypesList()) {</span>
-<span class="source-line-no">1930</span><span id="line-1930">        MasterSwitchType switchType = convert(masterSwitchType);</span>
-<span class="source-line-no">1931</span><span id="line-1931">        boolean oldValue = server.isSplitOrMergeEnabled(switchType);</span>
-<span class="source-line-no">1932</span><span id="line-1932">        response.addPrevValue(oldValue);</span>
-<span class="source-line-no">1933</span><span id="line-1933">        if (server.cpHost != null) {</span>
-<span class="source-line-no">1934</span><span id="line-1934">          server.cpHost.preSetSplitOrMergeEnabled(newValue, switchType);</span>
-<span class="source-line-no">1935</span><span id="line-1935">        }</span>
-<span class="source-line-no">1936</span><span id="line-1936">        server.getSplitOrMergeStateStore().setSplitOrMergeEnabled(newValue, switchType);</span>
-<span class="source-line-no">1937</span><span id="line-1937">        if (server.cpHost != null) {</span>
-<span class="source-line-no">1938</span><span id="line-1938">          server.cpHost.postSetSplitOrMergeEnabled(newValue, switchType);</span>
-<span class="source-line-no">1939</span><span id="line-1939">        }</span>
-<span class="source-line-no">1940</span><span id="line-1940">      }</span>
-<span class="source-line-no">1941</span><span id="line-1941">    } catch (IOException e) {</span>
-<span class="source-line-no">1942</span><span id="line-1942">      throw new ServiceException(e);</span>
-<span class="source-line-no">1943</span><span id="line-1943">    }</span>
-<span class="source-line-no">1944</span><span id="line-1944">    return response.build();</span>
-<span class="source-line-no">1945</span><span id="line-1945">  }</span>
-<span class="source-line-no">1946</span><span id="line-1946"></span>
-<span class="source-line-no">1947</span><span id="line-1947">  @Override</span>
-<span class="source-line-no">1948</span><span id="line-1948">  public IsSplitOrMergeEnabledResponse isSplitOrMergeEnabled(RpcController controller,</span>
-<span class="source-line-no">1949</span><span id="line-1949">    IsSplitOrMergeEnabledRequest request) throws ServiceException {</span>
-<span class="source-line-no">1950</span><span id="line-1950">    IsSplitOrMergeEnabledResponse.Builder response = IsSplitOrMergeEnabledResponse.newBuilder();</span>
-<span class="source-line-no">1951</span><span id="line-1951">    response.setEnabled(server.isSplitOrMergeEnabled(convert(request.getSwitchType())));</span>
-<span class="source-line-no">1952</span><span id="line-1952">    return response.build();</span>
-<span class="source-line-no">1953</span><span id="line-1953">  }</span>
-<span class="source-line-no">1954</span><span id="line-1954"></span>
-<span class="source-line-no">1955</span><span id="line-1955">  @Override</span>
-<span class="source-line-no">1956</span><span id="line-1956">  public NormalizeResponse normalize(RpcController controller, NormalizeRequest request)</span>
-<span class="source-line-no">1957</span><span id="line-1957">    throws ServiceException {</span>
-<span class="source-line-no">1958</span><span id="line-1958">    rpcPreCheck("normalize");</span>
-<span class="source-line-no">1959</span><span id="line-1959">    try {</span>
-<span class="source-line-no">1960</span><span id="line-1960">      final NormalizeTableFilterParams ntfp = new NormalizeTableFilterParams.Builder()</span>
-<span class="source-line-no">1961</span><span id="line-1961">        .tableNames(ProtobufUtil.toTableNameList(request.getTableNamesList()))</span>
-<span class="source-line-no">1962</span><span id="line-1962">        .regex(request.hasRegex() ? request.getRegex() : null)</span>
-<span class="source-line-no">1963</span><span id="line-1963">        .namespace(request.hasNamespace() ? request.getNamespace() : null).build();</span>
-<span class="source-line-no">1964</span><span id="line-1964">      return NormalizeResponse.newBuilder()</span>
-<span class="source-line-no">1965</span><span id="line-1965">        // all API requests are considered priority requests.</span>
-<span class="source-line-no">1966</span><span id="line-1966">        .setNormalizerRan(server.normalizeRegions(ntfp, true)).build();</span>
-<span class="source-line-no">1967</span><span id="line-1967">    } catch (IOException ex) {</span>
-<span class="source-line-no">1968</span><span id="line-1968">      throw new ServiceException(ex);</span>
-<span class="source-line-no">1969</span><span id="line-1969">    }</span>
-<span class="source-line-no">1970</span><span id="line-1970">  }</span>
-<span class="source-line-no">1971</span><span id="line-1971"></span>
-<span class="source-line-no">1972</span><span id="line-1972">  @Override</span>
-<span class="source-line-no">1973</span><span id="line-1973">  public SetNormalizerRunningResponse setNormalizerRunning(RpcController controller,</span>
-<span class="source-line-no">1974</span><span id="line-1974">    SetNormalizerRunningRequest request) throws ServiceException {</span>
-<span class="source-line-no">1975</span><span id="line-1975">    rpcPreCheck("setNormalizerRunning");</span>
-<span class="source-line-no">1976</span><span id="line-1976"></span>
-<span class="source-line-no">1977</span><span id="line-1977">    // Sets normalizer on/off flag in ZK.</span>
-<span class="source-line-no">1978</span><span id="line-1978">    // TODO: this method is totally broken in terms of atomicity of actions and values read.</span>
-<span class="source-line-no">1979</span><span id="line-1979">    // 1. The contract has this RPC returning the previous value. There isn't a ZKUtil method</span>
-<span class="source-line-no">1980</span><span id="line-1980">    // that lets us retrieve the previous value as part of setting a new value, so we simply</span>
-<span class="source-line-no">1981</span><span id="line-1981">    // perform a read before issuing the update. Thus we have a data race opportunity, between</span>
-<span class="source-line-no">1982</span><span id="line-1982">    // when the `prevValue` is read and whatever is actually overwritten.</span>
-<span class="source-line-no">1983</span><span id="line-1983">    // 2. Down in `setNormalizerOn`, the call to `createAndWatch` inside of the catch clause can</span>
-<span class="source-line-no">1984</span><span id="line-1984">    // itself fail in the event that the znode already exists. Thus, another data race, between</span>
-<span class="source-line-no">1985</span><span id="line-1985">    // when the initial `setData` call is notified of the absence of the target znode and the</span>
-<span class="source-line-no">1986</span><span id="line-1986">    // subsequent `createAndWatch`, with another client creating said node.</span>
-<span class="source-line-no">1987</span><span id="line-1987">    // That said, there's supposed to be only one active master and thus there's supposed to be</span>
-<span class="source-line-no">1988</span><span id="line-1988">    // only one process with the authority to modify the value.</span>
-<span class="source-line-no">1989</span><span id="line-1989">    final boolean prevValue = server.getRegionNormalizerManager().isNormalizerOn();</span>
-<span class="source-line-no">1990</span><span id="line-1990">    final boolean newValue = request.getOn();</span>
-<span class="source-line-no">1991</span><span id="line-1991">    try {</span>
-<span class="source-line-no">1992</span><span id="line-1992">      server.getRegionNormalizerManager().setNormalizerOn(newValue);</span>
-<span class="source-line-no">1993</span><span id="line-1993">    } catch (IOException e) {</span>
-<span class="source-line-no">1994</span><span id="line-1994">      throw new ServiceException(e);</span>
-<span class="source-line-no">1995</span><span id="line-1995">    }</span>
-<span class="source-line-no">1996</span><span id="line-1996">    LOG.info("{} set normalizerSwitch={}", server.getClientIdAuditPrefix(), newValue);</span>
-<span class="source-line-no">1997</span><span id="line-1997">    return SetNormalizerRunningResponse.newBuilder().setPrevNormalizerValue(prevValue).build();</span>
-<span class="source-line-no">1998</span><span id="line-1998">  }</span>
-<span class="source-line-no">1999</span><span id="line-1999"></span>
-<span class="source-line-no">2000</span><span id="line-2000">  @Override</span>
-<span class="source-line-no">2001</span><span id="line-2001">  public IsNormalizerEnabledResponse isNormalizerEnabled(RpcController controller,</span>
-<span class="source-line-no">2002</span><span id="line-2002">    IsNormalizerEnabledRequest request) {</span>
-<span class="source-line-no">2003</span><span id="line-2003">    IsNormalizerEnabledResponse.Builder response = IsNormalizerEnabledResponse.newBuilder();</span>
-<span class="source-line-no">2004</span><span id="line-2004">    response.setEnabled(server.isNormalizerOn());</span>
-<span class="source-line-no">2005</span><span id="line-2005">    return response.build();</span>
-<span class="source-line-no">2006</span><span id="line-2006">  }</span>
-<span class="source-line-no">2007</span><span id="line-2007"></span>
-<span class="source-line-no">2008</span><span id="line-2008">  /**</span>
-<span class="source-line-no">2009</span><span id="line-2009">   * Returns the security capabilities in effect on the cluster</span>
-<span class="source-line-no">2010</span><span id="line-2010">   */</span>
-<span class="source-line-no">2011</span><span id="line-2011">  @Override</span>
-<span class="source-line-no">2012</span><span id="line-2012">  public SecurityCapabilitiesResponse getSecurityCapabilities(RpcController controller,</span>
-<span class="source-line-no">2013</span><span id="line-2013">    SecurityCapabilitiesRequest request) throws ServiceException {</span>
-<span class="source-line-no">2014</span><span id="line-2014">    SecurityCapabilitiesResponse.Builder response = SecurityCapabilitiesResponse.newBuilder();</span>
-<span class="source-line-no">2015</span><span id="line-2015">    try {</span>
-<span class="source-line-no">2016</span><span id="line-2016">      server.checkInitialized();</span>
-<span class="source-line-no">2017</span><span id="line-2017">      Set&lt;SecurityCapabilitiesResponse.Capability&gt; capabilities = new HashSet&lt;&gt;();</span>
-<span class="source-line-no">2018</span><span id="line-2018">      // Authentication</span>
-<span class="source-line-no">2019</span><span id="line-2019">      if (User.isHBaseSecurityEnabled(server.getConfiguration())) {</span>
-<span class="source-line-no">2020</span><span id="line-2020">        capabilities.add(SecurityCapabilitiesResponse.Capability.SECURE_AUTHENTICATION);</span>
-<span class="source-line-no">2021</span><span id="line-2021">      } else {</span>
-<span class="source-line-no">2022</span><span id="line-2022">        capabilities.add(SecurityCapabilitiesResponse.Capability.SIMPLE_AUTHENTICATION);</span>
-<span class="source-line-no">2023</span><span id="line-2023">      }</span>
-<span class="source-line-no">2024</span><span id="line-2024">      // A coprocessor that implements AccessControlService can provide AUTHORIZATION and</span>
-<span class="source-line-no">2025</span><span id="line-2025">      // CELL_AUTHORIZATION</span>
-<span class="source-line-no">2026</span><span id="line-2026">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
-<span class="source-line-no">2027</span><span id="line-2027">        if (AccessChecker.isAuthorizationSupported(server.getConfiguration())) {</span>
-<span class="source-line-no">2028</span><span id="line-2028">          capabilities.add(SecurityCapabilitiesResponse.Capability.AUTHORIZATION);</span>
-<span class="source-line-no">2029</span><span id="line-2029">        }</span>
-<span class="source-line-no">2030</span><span id="line-2030">        if (AccessController.isCellAuthorizationSupported(server.getConfiguration())) {</span>
-<span class="source-line-no">2031</span><span id="line-2031">          capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_AUTHORIZATION);</span>
-<span class="source-line-no">2032</span><span id="line-2032">        }</span>
-<span class="source-line-no">2033</span><span id="line-2033">      }</span>
-<span class="source-line-no">2034</span><span id="line-2034">      // A coprocessor that implements VisibilityLabelsService can provide CELL_VISIBILITY.</span>
-<span class="source-line-no">2035</span><span id="line-2035">      if (server.cpHost != null &amp;&amp; hasVisibilityLabelsServiceCoprocessor(server.cpHost)) {</span>
-<span class="source-line-no">2036</span><span id="line-2036">        if (VisibilityController.isCellAuthorizationSupported(server.getConfiguration())) {</span>
-<span class="source-line-no">2037</span><span id="line-2037">          capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_VISIBILITY);</span>
-<span class="source-line-no">2038</span><span id="line-2038">        }</span>
-<span class="source-line-no">2039</span><span id="line-2039">      }</span>
-<span class="source-line-no">2040</span><span id="line-2040">      response.addAllCapabilities(capabilities);</span>
-<span class="source-line-no">2041</span><span id="line-2041">    } catch (IOException e) {</span>
-<span class="source-line-no">2042</span><span id="line-2042">      throw new ServiceException(e);</span>
-<span class="source-line-no">2043</span><span id="line-2043">    }</span>
-<span class="source-line-no">2044</span><span id="line-2044">    return response.build();</span>
-<span class="source-line-no">2045</span><span id="line-2045">  }</span>
-<span class="source-line-no">2046</span><span id="line-2046"></span>
-<span class="source-line-no">2047</span><span id="line-2047">  /**</span>
-<span class="source-line-no">2048</span><span id="line-2048">   * Determines if there is a MasterCoprocessor deployed which implements</span>
-<span class="source-line-no">2049</span><span id="line-2049">   * {@link AccessControlService.Interface}.</span>
-<span class="source-line-no">2050</span><span id="line-2050">   */</span>
-<span class="source-line-no">2051</span><span id="line-2051">  boolean hasAccessControlServiceCoprocessor(MasterCoprocessorHost cpHost) {</span>
-<span class="source-line-no">2052</span><span id="line-2052">    return checkCoprocessorWithService(cpHost.findCoprocessors(MasterCoprocessor.class),</span>
-<span class="source-line-no">2053</span><span id="line-2053">      AccessControlService.Interface.class);</span>
-<span class="source-line-no">2054</span><span id="line-2054">  }</span>
-<span class="source-line-no">2055</span><span id="line-2055"></span>
-<span class="source-line-no">2056</span><span id="line-2056">  /**</span>
-<span class="source-line-no">2057</span><span id="line-2057">   * Determines if there is a MasterCoprocessor deployed which implements</span>
-<span class="source-line-no">2058</span><span id="line-2058">   * {@link VisibilityLabelsService.Interface}.</span>
-<span class="source-line-no">2059</span><span id="line-2059">   */</span>
-<span class="source-line-no">2060</span><span id="line-2060">  boolean hasVisibilityLabelsServiceCoprocessor(MasterCoprocessorHost cpHost) {</span>
-<span class="source-line-no">2061</span><span id="line-2061">    return checkCoprocessorWithService(cpHost.findCoprocessors(MasterCoprocessor.class),</span>
-<span class="source-line-no">2062</span><span id="line-2062">      VisibilityLabelsService.Interface.class);</span>
-<span class="source-line-no">2063</span><span id="line-2063">  }</span>
-<span class="source-line-no">2064</span><span id="line-2064"></span>
-<span class="source-line-no">2065</span><span id="line-2065">  /**</span>
-<span class="source-line-no">2066</span><span id="line-2066">   * Determines if there is a coprocessor implementation in the provided argument which extends or</span>
-<span class="source-line-no">2067</span><span id="line-2067">   * implements the provided {@code service}.</span>
-<span class="source-line-no">2068</span><span id="line-2068">   */</span>
-<span class="source-line-no">2069</span><span id="line-2069">  boolean checkCoprocessorWithService(List&lt;MasterCoprocessor&gt; coprocessorsToCheck,</span>
-<span class="source-line-no">2070</span><span id="line-2070">    Class&lt;?&gt; service) {</span>
-<span class="source-line-no">2071</span><span id="line-2071">    if (coprocessorsToCheck == null || coprocessorsToCheck.isEmpty()) {</span>
-<span class="source-line-no">2072</span><span id="line-2072">      return false;</span>
-<span class="source-line-no">2073</span><span id="line-2073">    }</span>
-<span class="source-line-no">2074</span><span id="line-2074">    for (MasterCoprocessor cp : coprocessorsToCheck) {</span>
-<span class="source-line-no">2075</span><span id="line-2075">      if (service.isAssignableFrom(cp.getClass())) {</span>
-<span class="source-line-no">2076</span><span id="line-2076">        return true;</span>
-<span class="source-line-no">2077</span><span id="line-2077">      }</span>
-<span class="source-line-no">2078</span><span id="line-2078">    }</span>
-<span class="source-line-no">2079</span><span id="line-2079">    return false;</span>
-<span class="source-line-no">2080</span><span id="line-2080">  }</span>
-<span class="source-line-no">2081</span><span id="line-2081"></span>
-<span class="source-line-no">2082</span><span id="line-2082">  private MasterSwitchType convert(MasterProtos.MasterSwitchType switchType) {</span>
-<span class="source-line-no">2083</span><span id="line-2083">    switch (switchType) {</span>
-<span class="source-line-no">2084</span><span id="line-2084">      case SPLIT:</span>
-<span class="source-line-no">2085</span><span id="line-2085">        return MasterSwitchType.SPLIT;</span>
-<span class="source-line-no">2086</span><span id="line-2086">      case MERGE:</span>
-<span class="source-line-no">2087</span><span id="line-2087">        return MasterSwitchType.MERGE;</span>
-<span class="source-line-no">2088</span><span id="line-2088">      default:</span>
-<span class="source-line-no">2089</span><span id="line-2089">        break;</span>
-<span class="source-line-no">2090</span><span id="line-2090">    }</span>
-<span class="source-line-no">2091</span><span id="line-2091">    return null;</span>
-<span class="source-line-no">2092</span><span id="line-2092">  }</span>
-<span class="source-line-no">2093</span><span id="line-2093"></span>
-<span class="source-line-no">2094</span><span id="line-2094">  @Override</span>
-<span class="source-line-no">2095</span><span id="line-2095">  public AddReplicationPeerResponse addReplicationPeer(RpcController controller,</span>
-<span class="source-line-no">2096</span><span id="line-2096">    AddReplicationPeerRequest request) throws ServiceException {</span>
-<span class="source-line-no">2097</span><span id="line-2097">    try {</span>
-<span class="source-line-no">2098</span><span id="line-2098">      long procId = server.addReplicationPeer(request.getPeerId(),</span>
-<span class="source-line-no">2099</span><span id="line-2099">        ReplicationPeerConfigUtil.convert(request.getPeerConfig()),</span>
-<span class="source-line-no">2100</span><span id="line-2100">        request.getPeerState().getState().equals(ReplicationState.State.ENABLED));</span>
-<span class="source-line-no">2101</span><span id="line-2101">      return AddReplicationPeerResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">2102</span><span id="line-2102">    } catch (ReplicationException | IOException e) {</span>
-<span class="source-line-no">2103</span><span id="line-2103">      throw new ServiceException(e);</span>
-<span class="source-line-no">2104</span><span id="line-2104">    }</span>
-<span class="source-line-no">2105</span><span id="line-2105">  }</span>
-<span class="source-line-no">2106</span><span id="line-2106"></span>
-<span class="source-line-no">2107</span><span id="line-2107">  @Override</span>
-<span class="source-line-no">2108</span><span id="line-2108">  public RemoveReplicationPeerResponse removeReplicationPeer(RpcController controller,</span>
-<span class="source-line-no">2109</span><span id="line-2109">    RemoveReplicationPeerRequest request) throws ServiceException {</span>
-<span class="source-line-no">2110</span><span id="line-2110">    try {</span>
-<span class="source-line-no">2111</span><span id="line-2111">      long procId = server.removeReplicationPeer(request.getPeerId());</span>
-<span class="source-line-no">2112</span><span id="line-2112">      return RemoveReplicationPeerResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">2113</span><span id="line-2113">    } catch (ReplicationException | IOException e) {</span>
-<span class="source-line-no">2114</span><span id="line-2114">      throw new ServiceException(e);</span>
-<span class="source-line-no">2115</span><span id="line-2115">    }</span>
-<span class="source-line-no">2116</span><span id="line-2116">  }</span>
-<span class="source-line-no">2117</span><span id="line-2117"></span>
-<span class="source-line-no">2118</span><span id="line-2118">  @Override</span>
-<span class="source-line-no">2119</span><span id="line-2119">  public EnableReplicationPeerResponse enableReplicationPeer(RpcController controller,</span>
-<span class="source-line-no">2120</span><span id="line-2120">    EnableReplicationPeerRequest request) throws ServiceException {</span>
-<span class="source-line-no">2121</span><span id="line-2121">    try {</span>
-<span class="source-line-no">2122</span><span id="line-2122">      long procId = server.enableReplicationPeer(request.getPeerId());</span>
-<span class="source-line-no">2123</span><span id="line-2123">      return EnableReplicationPeerResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">2124</span><span id="line-2124">    } catch (ReplicationException | IOException e) {</span>
-<span class="source-line-no">2125</span><span id="line-2125">      throw new ServiceException(e);</span>
-<span class="source-line-no">2126</span><span id="line-2126">    }</span>
-<span class="source-line-no">2127</span><span id="line-2127">  }</span>
-<span class="source-line-no">2128</span><span id="line-2128"></span>
-<span class="source-line-no">2129</span><span id="line-2129">  @Override</span>
-<span class="source-line-no">2130</span><span id="line-2130">  public DisableReplicationPeerResponse disableReplicationPeer(RpcController controller,</span>
-<span class="source-line-no">2131</span><span id="line-2131">    DisableReplicationPeerRequest request) throws ServiceException {</span>
-<span class="source-line-no">2132</span><span id="line-2132">    try {</span>
-<span class="source-line-no">2133</span><span id="line-2133">      long procId = server.disableReplicationPeer(request.getPeerId());</span>
-<span class="source-line-no">2134</span><span id="line-2134">      return DisableReplicationPeerResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">2135</span><span id="line-2135">    } catch (ReplicationException | IOException e) {</span>
-<span class="source-line-no">2136</span><span id="line-2136">      throw new ServiceException(e);</span>
-<span class="source-line-no">2137</span><span id="line-2137">    }</span>
-<span class="source-line-no">2138</span><span id="line-2138">  }</span>
-<span class="source-line-no">2139</span><span id="line-2139"></span>
-<span class="source-line-no">2140</span><span id="line-2140">  @Override</span>
-<span class="source-line-no">2141</span><span id="line-2141">  public GetReplicationPeerConfigResponse getReplicationPeerConfig(RpcController controller,</span>
-<span class="source-line-no">2142</span><span id="line-2142">    GetReplicationPeerConfigRequest request) throws ServiceException {</span>
-<span class="source-line-no">2143</span><span id="line-2143">    GetReplicationPeerConfigResponse.Builder response =</span>
-<span class="source-line-no">2144</span><span id="line-2144">      GetReplicationPeerConfigResponse.newBuilder();</span>
-<span class="source-line-no">2145</span><span id="line-2145">    try {</span>
-<span class="source-line-no">2146</span><span id="line-2146">      String peerId = request.getPeerId();</span>
-<span class="source-line-no">2147</span><span id="line-2147">      ReplicationPeerConfig peerConfig = server.getReplicationPeerConfig(peerId);</span>
-<span class="source-line-no">2148</span><span id="line-2148">      response.setPeerId(peerId);</span>
-<span class="source-line-no">2149</span><span id="line-2149">      response.setPeerConfig(ReplicationPeerConfigUtil.convert(peerConfig));</span>
-<span class="source-line-no">2150</span><span id="line-2150">    } catch (ReplicationException | IOException e) {</span>
-<span class="source-line-no">2151</span><span id="line-2151">      throw new ServiceException(e);</span>
-<span class="source-line-no">2152</span><span id="line-2152">    }</span>
-<span class="source-line-no">2153</span><span id="line-2153">    return response.build();</span>
-<span class="source-line-no">2154</span><span id="line-2154">  }</span>
-<span class="source-line-no">2155</span><span id="line-2155"></span>
-<span class="source-line-no">2156</span><span id="line-2156">  @Override</span>
-<span class="source-line-no">2157</span><span id="line-2157">  public UpdateReplicationPeerConfigResponse updateReplicationPeerConfig(RpcController controller,</span>
-<span class="source-line-no">2158</span><span id="line-2158">    UpdateReplicationPeerConfigRequest request) throws ServiceException {</span>
-<span class="source-line-no">2159</span><span id="line-2159">    try {</span>
-<span class="source-line-no">2160</span><span id="line-2160">      long procId = server.updateReplicationPeerConfig(request.getPeerId(),</span>
-<span class="source-line-no">2161</span><span id="line-2161">        ReplicationPeerConfigUtil.convert(request.getPeerConfig()));</span>
-<span class="source-line-no">2162</span><span id="line-2162">      return UpdateReplicationPeerConfigResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">2163</span><span id="line-2163">    } catch (ReplicationException | IOException e) {</span>
-<span class="source-line-no">2164</span><span id="line-2164">      throw new ServiceException(e);</span>
-<span class="source-line-no">2165</span><span id="line-2165">    }</span>
-<span class="source-line-no">2166</span><span id="line-2166">  }</span>
-<span class="source-line-no">2167</span><span id="line-2167"></span>
-<span class="source-line-no">2168</span><span id="line-2168">  @Override</span>
-<span class="source-line-no">2169</span><span id="line-2169">  public TransitReplicationPeerSyncReplicationStateResponse</span>
-<span class="source-line-no">2170</span><span id="line-2170">    transitReplicationPeerSyncReplicationState(RpcController controller,</span>
-<span class="source-line-no">2171</span><span id="line-2171">      TransitReplicationPeerSyncReplicationStateRequest request) throws ServiceException {</span>
-<span class="source-line-no">2172</span><span id="line-2172">    try {</span>
-<span class="source-line-no">2173</span><span id="line-2173">      long procId = server.transitReplicationPeerSyncReplicationState(request.getPeerId(),</span>
-<span class="source-line-no">2174</span><span id="line-2174">        ReplicationPeerConfigUtil.toSyncReplicationState(request.getSyncReplicationState()));</span>
-<span class="source-line-no">2175</span><span id="line-2175">      return TransitReplicationPeerSyncReplicationStateResponse.newBuilder().setProcId(procId)</span>
-<span class="source-line-no">2176</span><span id="line-2176">        .build();</span>
-<span class="source-line-no">2177</span><span id="line-2177">    } catch (ReplicationException | IOException e) {</span>
-<span class="source-line-no">2178</span><span id="line-2178">      throw new ServiceException(e);</span>
-<span class="source-line-no">2179</span><span id="line-2179">    }</span>
-<span class="source-line-no">2180</span><span id="line-2180">  }</span>
-<span class="source-line-no">2181</span><span id="line-2181"></span>
-<span class="source-line-no">2182</span><span id="line-2182">  @Override</span>
-<span class="source-line-no">2183</span><span id="line-2183">  public ListReplicationPeersResponse listReplicationPeers(RpcController controller,</span>
-<span class="source-line-no">2184</span><span id="line-2184">    ListReplicationPeersRequest request) throws ServiceException {</span>
-<span class="source-line-no">2185</span><span id="line-2185">    ListReplicationPeersResponse.Builder response = ListReplicationPeersResponse.newBuilder();</span>
-<span class="source-line-no">2186</span><span id="line-2186">    try {</span>
-<span class="source-line-no">2187</span><span id="line-2187">      List&lt;ReplicationPeerDescription&gt; peers =</span>
-<span class="source-line-no">2188</span><span id="line-2188">        server.listReplicationPeers(request.hasRegex() ? request.getRegex() : null);</span>
-<span class="source-line-no">2189</span><span id="line-2189">      for (ReplicationPeerDescription peer : peers) {</span>
-<span class="source-line-no">2190</span><span id="line-2190">        response.addPeerDesc(ReplicationPeerConfigUtil.toProtoReplicationPeerDescription(peer));</span>
-<span class="source-line-no">2191</span><span id="line-2191">      }</span>
-<span class="source-line-no">2192</span><span id="line-2192">    } catch (ReplicationException | IOException e) {</span>
-<span class="source-line-no">2193</span><span id="line-2193">      throw new ServiceException(e);</span>
-<span class="source-line-no">2194</span><span id="line-2194">    }</span>
-<span class="source-line-no">2195</span><span id="line-2195">    return response.build();</span>
-<span class="source-line-no">2196</span><span id="line-2196">  }</span>
-<span class="source-line-no">2197</span><span id="line-2197"></span>
-<span class="source-line-no">2198</span><span id="line-2198">  @Override</span>
-<span class="source-line-no">2199</span><span id="line-2199">  public GetReplicationPeerStateResponse isReplicationPeerEnabled(RpcController controller,</span>
-<span class="source-line-no">2200</span><span id="line-2200">    GetReplicationPeerStateRequest request) throws ServiceException {</span>
-<span class="source-line-no">2201</span><span id="line-2201">    boolean isEnabled;</span>
-<span class="source-line-no">2202</span><span id="line-2202">    try {</span>
-<span class="source-line-no">2203</span><span id="line-2203">      isEnabled = server.getReplicationPeerManager().getPeerState(request.getPeerId());</span>
-<span class="source-line-no">2204</span><span id="line-2204">    } catch (ReplicationException ioe) {</span>
-<span class="source-line-no">2205</span><span id="line-2205">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2206</span><span id="line-2206">    }</span>
-<span class="source-line-no">2207</span><span id="line-2207">    return GetReplicationPeerStateResponse.newBuilder().setIsEnabled(isEnabled).build();</span>
-<span class="source-line-no">2208</span><span id="line-2208">  }</span>
-<span class="source-line-no">2209</span><span id="line-2209"></span>
-<span class="source-line-no">2210</span><span id="line-2210">  @Override</span>
-<span class="source-line-no">2211</span><span id="line-2211">  public ReplicationPeerModificationSwitchResponse replicationPeerModificationSwitch(</span>
-<span class="source-line-no">2212</span><span id="line-2212">    RpcController controller, ReplicationPeerModificationSwitchRequest request)</span>
-<span class="source-line-no">2213</span><span id="line-2213">    throws ServiceException {</span>
-<span class="source-line-no">2214</span><span id="line-2214">    try {</span>
-<span class="source-line-no">2215</span><span id="line-2215">      server.checkInitialized();</span>
-<span class="source-line-no">2216</span><span id="line-2216">      boolean prevValue = server.replicationPeerModificationSwitch(request.getOn());</span>
-<span class="source-line-no">2217</span><span id="line-2217">      return ReplicationPeerModificationSwitchResponse.newBuilder().setPreviousValue(prevValue)</span>
-<span class="source-line-no">2218</span><span id="line-2218">        .build();</span>
-<span class="source-line-no">2219</span><span id="line-2219">    } catch (IOException ioe) {</span>
-<span class="source-line-no">2220</span><span id="line-2220">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2221</span><span id="line-2221">    }</span>
-<span class="source-line-no">2222</span><span id="line-2222">  }</span>
-<span class="source-line-no">2223</span><span id="line-2223"></span>
-<span class="source-line-no">2224</span><span id="line-2224">  @Override</span>
-<span class="source-line-no">2225</span><span id="line-2225">  public GetReplicationPeerModificationProceduresResponse getReplicationPeerModificationProcedures(</span>
-<span class="source-line-no">2226</span><span id="line-2226">    RpcController controller, GetReplicationPeerModificationProceduresRequest request)</span>
-<span class="source-line-no">2227</span><span id="line-2227">    throws ServiceException {</span>
-<span class="source-line-no">2228</span><span id="line-2228">    try {</span>
-<span class="source-line-no">2229</span><span id="line-2229">      server.checkInitialized();</span>
-<span class="source-line-no">2230</span><span id="line-2230">      GetReplicationPeerModificationProceduresResponse.Builder builder =</span>
-<span class="source-line-no">2231</span><span id="line-2231">        GetReplicationPeerModificationProceduresResponse.newBuilder();</span>
-<span class="source-line-no">2232</span><span id="line-2232">      for (Procedure&lt;?&gt; proc : server.getProcedures()) {</span>
-<span class="source-line-no">2233</span><span id="line-2233">        if (proc.isFinished()) {</span>
-<span class="source-line-no">2234</span><span id="line-2234">          continue;</span>
-<span class="source-line-no">2235</span><span id="line-2235">        }</span>
-<span class="source-line-no">2236</span><span id="line-2236">        if (!(proc instanceof AbstractPeerNoLockProcedure)) {</span>
-<span class="source-line-no">2237</span><span id="line-2237">          continue;</span>
-<span class="source-line-no">2238</span><span id="line-2238">        }</span>
-<span class="source-line-no">2239</span><span id="line-2239">        builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));</span>
-<span class="source-line-no">2240</span><span id="line-2240">      }</span>
-<span class="source-line-no">2241</span><span id="line-2241">      return builder.build();</span>
-<span class="source-line-no">2242</span><span id="line-2242">    } catch (IOException ioe) {</span>
-<span class="source-line-no">2243</span><span id="line-2243">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2244</span><span id="line-2244">    }</span>
-<span class="source-line-no">2245</span><span id="line-2245">  }</span>
-<span class="source-line-no">2246</span><span id="line-2246"></span>
-<span class="source-line-no">2247</span><span id="line-2247">  @Override</span>
-<span class="source-line-no">2248</span><span id="line-2248">  public IsReplicationPeerModificationEnabledResponse isReplicationPeerModificationEnabled(</span>
-<span class="source-line-no">2249</span><span id="line-2249">    RpcController controller, IsReplicationPeerModificationEnabledRequest request)</span>
-<span class="source-line-no">2250</span><span id="line-2250">    throws ServiceException {</span>
-<span class="source-line-no">2251</span><span id="line-2251">    try {</span>
-<span class="source-line-no">2252</span><span id="line-2252">      server.checkInitialized();</span>
-<span class="source-line-no">2253</span><span id="line-2253">      return IsReplicationPeerModificationEnabledResponse.newBuilder()</span>
-<span class="source-line-no">2254</span><span id="line-2254">        .setEnabled(server.isReplicationPeerModificationEnabled()).build();</span>
-<span class="source-line-no">2255</span><span id="line-2255">    } catch (IOException ioe) {</span>
-<span class="source-line-no">2256</span><span id="line-2256">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2257</span><span id="line-2257">    }</span>
-<span class="source-line-no">2258</span><span id="line-2258">  }</span>
-<span class="source-line-no">2259</span><span id="line-2259"></span>
-<span class="source-line-no">2260</span><span id="line-2260">  @Override</span>
-<span class="source-line-no">2261</span><span id="line-2261">  public ListDecommissionedRegionServersResponse listDecommissionedRegionServers(</span>
-<span class="source-line-no">2262</span><span id="line-2262">    RpcController controller, ListDecommissionedRegionServersRequest request)</span>
-<span class="source-line-no">2263</span><span id="line-2263">    throws ServiceException {</span>
-<span class="source-line-no">2264</span><span id="line-2264">    ListDecommissionedRegionServersResponse.Builder response =</span>
-<span class="source-line-no">2265</span><span id="line-2265">      ListDecommissionedRegionServersResponse.newBuilder();</span>
-<span class="source-line-no">2266</span><span id="line-2266">    try {</span>
-<span class="source-line-no">2267</span><span id="line-2267">      server.checkInitialized();</span>
-<span class="source-line-no">2268</span><span id="line-2268">      if (server.cpHost != null) {</span>
-<span class="source-line-no">2269</span><span id="line-2269">        server.cpHost.preListDecommissionedRegionServers();</span>
-<span class="source-line-no">2270</span><span id="line-2270">      }</span>
-<span class="source-line-no">2271</span><span id="line-2271">      List&lt;ServerName&gt; servers = server.listDecommissionedRegionServers();</span>
-<span class="source-line-no">2272</span><span id="line-2272">      response.addAllServerName((servers.stream().map(server -&gt; ProtobufUtil.toServerName(server)))</span>
-<span class="source-line-no">2273</span><span id="line-2273">        .collect(Collectors.toList()));</span>
-<span class="source-line-no">2274</span><span id="line-2274">      if (server.cpHost != null) {</span>
-<span class="source-line-no">2275</span><span id="line-2275">        server.cpHost.postListDecommissionedRegionServers();</span>
-<span class="source-line-no">2276</span><span id="line-2276">      }</span>
-<span class="source-line-no">2277</span><span id="line-2277">    } catch (IOException io) {</span>
-<span class="source-line-no">2278</span><span id="line-2278">      throw new ServiceException(io);</span>
-<span class="source-line-no">2279</span><span id="line-2279">    }</span>
-<span class="source-line-no">2280</span><span id="line-2280"></span>
-<span class="source-line-no">2281</span><span id="line-2281">    return response.build();</span>
-<span class="source-line-no">2282</span><span id="line-2282">  }</span>
-<span class="source-line-no">2283</span><span id="line-2283"></span>
-<span class="source-line-no">2284</span><span id="line-2284">  @Override</span>
-<span class="source-line-no">2285</span><span id="line-2285">  public DecommissionRegionServersResponse decommissionRegionServers(RpcController controller,</span>
-<span class="source-line-no">2286</span><span id="line-2286">    DecommissionRegionServersRequest request) throws ServiceException {</span>
-<span class="source-line-no">2287</span><span id="line-2287">    try {</span>
-<span class="source-line-no">2288</span><span id="line-2288">      server.checkInitialized();</span>
-<span class="source-line-no">2289</span><span id="line-2289">      List&lt;ServerName&gt; servers = request.getServerNameList().stream()</span>
-<span class="source-line-no">2290</span><span id="line-2290">        .map(pbServer -&gt; ProtobufUtil.toServerName(pbServer)).collect(Collectors.toList());</span>
-<span class="source-line-no">2291</span><span id="line-2291">      boolean offload = request.getOffload();</span>
-<span class="source-line-no">2292</span><span id="line-2292">      if (server.cpHost != null) {</span>
-<span class="source-line-no">2293</span><span id="line-2293">        server.cpHost.preDecommissionRegionServers(servers, offload);</span>
-<span class="source-line-no">2294</span><span id="line-2294">      }</span>
-<span class="source-line-no">2295</span><span id="line-2295">      server.decommissionRegionServers(servers, offload);</span>
-<span class="source-line-no">2296</span><span id="line-2296">      if (server.cpHost != null) {</span>
-<span class="source-line-no">2297</span><span id="line-2297">        server.cpHost.postDecommissionRegionServers(servers, offload);</span>
-<span class="source-line-no">2298</span><span id="line-2298">      }</span>
-<span class="source-line-no">2299</span><span id="line-2299">    } catch (IOException io) {</span>
-<span class="source-line-no">2300</span><span id="line-2300">      throw new ServiceException(io);</span>
-<span class="source-line-no">2301</span><span id="line-2301">    }</span>
-<span class="source-line-no">2302</span><span id="line-2302"></span>
-<span class="source-line-no">2303</span><span id="line-2303">    return DecommissionRegionServersResponse.newBuilder().build();</span>
-<span class="source-line-no">2304</span><span id="line-2304">  }</span>
-<span class="source-line-no">2305</span><span id="line-2305"></span>
-<span class="source-line-no">2306</span><span id="line-2306">  @Override</span>
-<span class="source-line-no">2307</span><span id="line-2307">  public RecommissionRegionServerResponse recommissionRegionServer(RpcController controller,</span>
-<span class="source-line-no">2308</span><span id="line-2308">    RecommissionRegionServerRequest request) throws ServiceException {</span>
-<span class="source-line-no">2309</span><span id="line-2309">    try {</span>
-<span class="source-line-no">2310</span><span id="line-2310">      server.checkInitialized();</span>
-<span class="source-line-no">2311</span><span id="line-2311">      ServerName sn = ProtobufUtil.toServerName(request.getServerName());</span>
-<span class="source-line-no">2312</span><span id="line-2312">      List&lt;byte[]&gt; encodedRegionNames = request.getRegionList().stream()</span>
-<span class="source-line-no">2313</span><span id="line-2313">        .map(regionSpecifier -&gt; regionSpecifier.getValue().toByteArray())</span>
-<span class="source-line-no">2314</span><span id="line-2314">        .collect(Collectors.toList());</span>
-<span class="source-line-no">2315</span><span id="line-2315">      if (server.cpHost != null) {</span>
-<span class="source-line-no">2316</span><span id="line-2316">        server.cpHost.preRecommissionRegionServer(sn, encodedRegionNames);</span>
-<span class="source-line-no">2317</span><span id="line-2317">      }</span>
-<span class="source-line-no">2318</span><span id="line-2318">      server.recommissionRegionServer(sn, encodedRegionNames);</span>
-<span class="source-line-no">2319</span><span id="line-2319">      if (server.cpHost != null) {</span>
-<span class="source-line-no">2320</span><span id="line-2320">        server.cpHost.postRecommissionRegionServer(sn, encodedRegionNames);</span>
-<span class="source-line-no">2321</span><span id="line-2321">      }</span>
-<span class="source-line-no">2322</span><span id="line-2322">    } catch (IOException io) {</span>
-<span class="source-line-no">2323</span><span id="line-2323">      throw new ServiceException(io);</span>
-<span class="source-line-no">2324</span><span id="line-2324">    }</span>
-<span class="source-line-no">2325</span><span id="line-2325"></span>
-<span class="source-line-no">2326</span><span id="line-2326">    return RecommissionRegionServerResponse.newBuilder().build();</span>
-<span class="source-line-no">2327</span><span id="line-2327">  }</span>
-<span class="source-line-no">2328</span><span id="line-2328"></span>
-<span class="source-line-no">2329</span><span id="line-2329">  @Override</span>
-<span class="source-line-no">2330</span><span id="line-2330">  public LockResponse requestLock(RpcController controller, final LockRequest request)</span>
-<span class="source-line-no">2331</span><span id="line-2331">    throws ServiceException {</span>
-<span class="source-line-no">2332</span><span id="line-2332">    try {</span>
-<span class="source-line-no">2333</span><span id="line-2333">      if (request.getDescription().isEmpty()) {</span>
-<span class="source-line-no">2334</span><span id="line-2334">        throw new IllegalArgumentException("Empty description");</span>
-<span class="source-line-no">2335</span><span id="line-2335">      }</span>
-<span class="source-line-no">2336</span><span id="line-2336">      NonceProcedureRunnable npr;</span>
-<span class="source-line-no">2337</span><span id="line-2337">      LockType type = LockType.valueOf(request.getLockType().name());</span>
-<span class="source-line-no">2338</span><span id="line-2338">      if (request.getRegionInfoCount() &gt; 0) {</span>
-<span class="source-line-no">2339</span><span id="line-2339">        final RegionInfo[] regionInfos = new RegionInfo[request.getRegionInfoCount()];</span>
-<span class="source-line-no">2340</span><span id="line-2340">        for (int i = 0; i &lt; request.getRegionInfoCount(); ++i) {</span>
-<span class="source-line-no">2341</span><span id="line-2341">          regionInfos[i] = ProtobufUtil.toRegionInfo(request.getRegionInfo(i));</span>
-<span class="source-line-no">2342</span><span id="line-2342">        }</span>
-<span class="source-line-no">2343</span><span id="line-2343">        npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span>
-<span class="source-line-no">2344</span><span id="line-2344">          @Override</span>
-<span class="source-line-no">2345</span><span id="line-2345">          protected void run() throws IOException {</span>
-<span class="source-line-no">2346</span><span id="line-2346">            setProcId(server.getLockManager().remoteLocks().requestRegionsLock(regionInfos,</span>
-<span class="source-line-no">2347</span><span id="line-2347">              request.getDescription(), getNonceKey()));</span>
-<span class="source-line-no">2348</span><span id="line-2348">          }</span>
-<span class="source-line-no">2349</span><span id="line-2349"></span>
-<span class="source-line-no">2350</span><span id="line-2350">          @Override</span>
-<span class="source-line-no">2351</span><span id="line-2351">          protected String getDescription() {</span>
-<span class="source-line-no">2352</span><span id="line-2352">            return "RequestLock";</span>
-<span class="source-line-no">2353</span><span id="line-2353">          }</span>
-<span class="source-line-no">2354</span><span id="line-2354">        };</span>
-<span class="source-line-no">2355</span><span id="line-2355">      } else if (request.hasTableName()) {</span>
-<span class="source-line-no">2356</span><span id="line-2356">        final TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span>
-<span class="source-line-no">2357</span><span id="line-2357">        npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span>
-<span class="source-line-no">2358</span><span id="line-2358">          @Override</span>
-<span class="source-line-no">2359</span><span id="line-2359">          protected void run() throws IOException {</span>
-<span class="source-line-no">2360</span><span id="line-2360">            setProcId(server.getLockManager().remoteLocks().requestTableLock(tableName, type,</span>
-<span class="source-line-no">2361</span><span id="line-2361">              request.getDescription(), getNonceKey()));</span>
-<span class="source-line-no">2362</span><span id="line-2362">          }</span>
-<span class="source-line-no">2363</span><span id="line-2363"></span>
-<span class="source-line-no">2364</span><span id="line-2364">          @Override</span>
-<span class="source-line-no">2365</span><span id="line-2365">          protected String getDescription() {</span>
-<span class="source-line-no">2366</span><span id="line-2366">            return "RequestLock";</span>
-<span class="source-line-no">2367</span><span id="line-2367">          }</span>
-<span class="source-line-no">2368</span><span id="line-2368">        };</span>
-<span class="source-line-no">2369</span><span id="line-2369">      } else if (request.hasNamespace()) {</span>
-<span class="source-line-no">2370</span><span id="line-2370">        npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span>
-<span class="source-line-no">2371</span><span id="line-2371">          @Override</span>
-<span class="source-line-no">2372</span><span id="line-2372">          protected void run() throws IOException {</span>
-<span class="source-line-no">2373</span><span id="line-2373">            setProcId(server.getLockManager().remoteLocks().requestNamespaceLock(</span>
-<span class="source-line-no">2374</span><span id="line-2374">              request.getNamespace(), type, request.getDescription(), getNonceKey()));</span>
-<span class="source-line-no">2375</span><span id="line-2375">          }</span>
-<span class="source-line-no">2376</span><span id="line-2376"></span>
-<span class="source-line-no">2377</span><span id="line-2377">          @Override</span>
-<span class="source-line-no">2378</span><span id="line-2378">          protected String getDescription() {</span>
-<span class="source-line-no">2379</span><span id="line-2379">            return "RequestLock";</span>
-<span class="source-line-no">2380</span><span id="line-2380">          }</span>
-<span class="source-line-no">2381</span><span id="line-2381">        };</span>
-<span class="source-line-no">2382</span><span id="line-2382">      } else {</span>
-<span class="source-line-no">2383</span><span id="line-2383">        throw new IllegalArgumentException("one of table/namespace/region should be specified");</span>
-<span class="source-line-no">2384</span><span id="line-2384">      }</span>
-<span class="source-line-no">2385</span><span id="line-2385">      long procId = MasterProcedureUtil.submitProcedure(npr);</span>
-<span class="source-line-no">2386</span><span id="line-2386">      return LockResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">2387</span><span id="line-2387">    } catch (IllegalArgumentException e) {</span>
-<span class="source-line-no">2388</span><span id="line-2388">      LOG.warn("Exception when queuing lock", e);</span>
-<span class="source-line-no">2389</span><span id="line-2389">      throw new ServiceException(new DoNotRetryIOException(e));</span>
-<span class="source-line-no">2390</span><span id="line-2390">    } catch (IOException e) {</span>
-<span class="source-line-no">2391</span><span id="line-2391">      LOG.warn("Exception when queuing lock", e);</span>
-<span class="source-line-no">2392</span><span id="line-2392">      throw new ServiceException(e);</span>
-<span class="source-line-no">2393</span><span id="line-2393">    }</span>
-<span class="source-line-no">2394</span><span id="line-2394">  }</span>
-<span class="source-line-no">2395</span><span id="line-2395"></span>
-<span class="source-line-no">2396</span><span id="line-2396">  /**</span>
-<span class="source-line-no">2397</span><span id="line-2397">   * @return LOCKED, if procedure is found and it has the lock; else UNLOCKED.</span>
-<span class="source-line-no">2398</span><span id="line-2398">   * @throws ServiceException if given proc id is found but it is not a LockProcedure.</span>
-<span class="source-line-no">2399</span><span id="line-2399">   */</span>
-<span class="source-line-no">2400</span><span id="line-2400">  @Override</span>
-<span class="source-line-no">2401</span><span id="line-2401">  public LockHeartbeatResponse lockHeartbeat(RpcController controller, LockHeartbeatRequest request)</span>
-<span class="source-line-no">2402</span><span id="line-2402">    throws ServiceException {</span>
-<span class="source-line-no">2403</span><span id="line-2403">    try {</span>
-<span class="source-line-no">2404</span><span id="line-2404">      if (</span>
-<span class="source-line-no">2405</span><span id="line-2405">        server.getLockManager().remoteLocks().lockHeartbeat(request.getProcId(),</span>
-<span class="source-line-no">2406</span><span id="line-2406">          request.getKeepAlive())</span>
-<span class="source-line-no">2407</span><span id="line-2407">      ) {</span>
-<span class="source-line-no">2408</span><span id="line-2408">        return LockHeartbeatResponse.newBuilder()</span>
-<span class="source-line-no">2409</span><span id="line-2409">          .setTimeoutMs(server.getConfiguration().getInt(LockProcedure.REMOTE_LOCKS_TIMEOUT_MS_CONF,</span>
-<span class="source-line-no">2410</span><span id="line-2410">            LockProcedure.DEFAULT_REMOTE_LOCKS_TIMEOUT_MS))</span>
-<span class="source-line-no">2411</span><span id="line-2411">          .setLockStatus(LockHeartbeatResponse.LockStatus.LOCKED).build();</span>
-<span class="source-line-no">2412</span><span id="line-2412">      } else {</span>
-<span class="source-line-no">2413</span><span id="line-2413">        return LockHeartbeatResponse.newBuilder()</span>
-<span class="source-line-no">2414</span><span id="line-2414">          .setLockStatus(LockHeartbeatResponse.LockStatus.UNLOCKED).build();</span>
-<span class="source-line-no">2415</span><span id="line-2415">      }</span>
-<span class="source-line-no">2416</span><span id="line-2416">    } catch (IOException e) {</span>
-<span class="source-line-no">2417</span><span id="line-2417">      throw new ServiceException(e);</span>
-<span class="source-line-no">2418</span><span id="line-2418">    }</span>
-<span class="source-line-no">2419</span><span id="line-2419">  }</span>
-<span class="source-line-no">2420</span><span id="line-2420"></span>
-<span class="source-line-no">2421</span><span id="line-2421">  @Override</span>
-<span class="source-line-no">2422</span><span id="line-2422">  public RegionSpaceUseReportResponse reportRegionSpaceUse(RpcController controller,</span>
-<span class="source-line-no">2423</span><span id="line-2423">    RegionSpaceUseReportRequest request) throws ServiceException {</span>
-<span class="source-line-no">2424</span><span id="line-2424">    try {</span>
-<span class="source-line-no">2425</span><span id="line-2425">      server.checkInitialized();</span>
-<span class="source-line-no">2426</span><span id="line-2426">      if (!QuotaUtil.isQuotaEnabled(server.getConfiguration())) {</span>
-<span class="source-line-no">2427</span><span id="line-2427">        return RegionSpaceUseReportResponse.newBuilder().build();</span>
-<span class="source-line-no">2428</span><span id="line-2428">      }</span>
-<span class="source-line-no">2429</span><span id="line-2429">      MasterQuotaManager quotaManager = this.server.getMasterQuotaManager();</span>
-<span class="source-line-no">2430</span><span id="line-2430">      if (quotaManager != null) {</span>
-<span class="source-line-no">2431</span><span id="line-2431">        final long now = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">2432</span><span id="line-2432">        for (RegionSpaceUse report : request.getSpaceUseList()) {</span>
-<span class="source-line-no">2433</span><span id="line-2433">          quotaManager.addRegionSize(ProtobufUtil.toRegionInfo(report.getRegionInfo()),</span>
-<span class="source-line-no">2434</span><span id="line-2434">            report.getRegionSize(), now);</span>
-<span class="source-line-no">2435</span><span id="line-2435">        }</span>
-<span class="source-line-no">2436</span><span id="line-2436">      } else {</span>
-<span class="source-line-no">2437</span><span id="line-2437">        LOG.debug("Received region space usage report but HMaster is not ready to process it, "</span>
-<span class="source-line-no">2438</span><span id="line-2438">          + "skipping");</span>
-<span class="source-line-no">2439</span><span id="line-2439">      }</span>
-<span class="source-line-no">2440</span><span id="line-2440">      return RegionSpaceUseReportResponse.newBuilder().build();</span>
-<span class="source-line-no">2441</span><span id="line-2441">    } catch (Exception e) {</span>
-<span class="source-line-no">2442</span><span id="line-2442">      throw new ServiceException(e);</span>
-<span class="source-line-no">2443</span><span id="line-2443">    }</span>
-<span class="source-line-no">2444</span><span id="line-2444">  }</span>
-<span class="source-line-no">2445</span><span id="line-2445"></span>
-<span class="source-line-no">2446</span><span id="line-2446">  @Override</span>
-<span class="source-line-no">2447</span><span id="line-2447">  public GetSpaceQuotaRegionSizesResponse getSpaceQuotaRegionSizes(RpcController controller,</span>
-<span class="source-line-no">2448</span><span id="line-2448">    GetSpaceQuotaRegionSizesRequest request) throws ServiceException {</span>
-<span class="source-line-no">2449</span><span id="line-2449">    try {</span>
-<span class="source-line-no">2450</span><span id="line-2450">      server.checkInitialized();</span>
-<span class="source-line-no">2451</span><span id="line-2451">      MasterQuotaManager quotaManager = this.server.getMasterQuotaManager();</span>
-<span class="source-line-no">2452</span><span id="line-2452">      GetSpaceQuotaRegionSizesResponse.Builder builder =</span>
-<span class="source-line-no">2453</span><span id="line-2453">        GetSpaceQuotaRegionSizesResponse.newBuilder();</span>
-<span class="source-line-no">2454</span><span id="line-2454">      if (quotaManager != null) {</span>
-<span class="source-line-no">2455</span><span id="line-2455">        Map&lt;RegionInfo, Long&gt; regionSizes = quotaManager.snapshotRegionSizes();</span>
-<span class="source-line-no">2456</span><span id="line-2456">        Map&lt;TableName, Long&gt; regionSizesByTable = new HashMap&lt;&gt;();</span>
-<span class="source-line-no">2457</span><span id="line-2457">        // Translate hregioninfo+long -&gt; tablename+long</span>
-<span class="source-line-no">2458</span><span id="line-2458">        for (Entry&lt;RegionInfo, Long&gt; entry : regionSizes.entrySet()) {</span>
-<span class="source-line-no">2459</span><span id="line-2459">          final TableName tableName = entry.getKey().getTable();</span>
-<span class="source-line-no">2460</span><span id="line-2460">          Long prevSize = regionSizesByTable.get(tableName);</span>
-<span class="source-line-no">2461</span><span id="line-2461">          if (prevSize == null) {</span>
-<span class="source-line-no">2462</span><span id="line-2462">            prevSize = 0L;</span>
-<span class="source-line-no">2463</span><span id="line-2463">          }</span>
-<span class="source-line-no">2464</span><span id="line-2464">          regionSizesByTable.put(tableName, prevSize + entry.getValue());</span>
-<span class="source-line-no">2465</span><span id="line-2465">        }</span>
-<span class="source-line-no">2466</span><span id="line-2466">        // Serialize them into the protobuf</span>
-<span class="source-line-no">2467</span><span id="line-2467">        for (Entry&lt;TableName, Long&gt; tableSize : regionSizesByTable.entrySet()) {</span>
-<span class="source-line-no">2468</span><span id="line-2468">          builder.addSizes(</span>
-<span class="source-line-no">2469</span><span id="line-2469">            RegionSizes.newBuilder().setTableName(ProtobufUtil.toProtoTableName(tableSize.getKey()))</span>
-<span class="source-line-no">2470</span><span id="line-2470">              .setSize(tableSize.getValue()).build());</span>
-<span class="source-line-no">2471</span><span id="line-2471">        }</span>
-<span class="source-line-no">2472</span><span id="line-2472">        return builder.build();</span>
-<span class="source-line-no">2473</span><span id="line-2473">      } else {</span>
-<span class="source-line-no">2474</span><span id="line-2474">        LOG.debug("Received space quota region size report but HMaster is not ready to process it,"</span>
-<span class="source-line-no">2475</span><span id="line-2475">          + "skipping");</span>
-<span class="source-line-no">2476</span><span id="line-2476">      }</span>
-<span class="source-line-no">2477</span><span id="line-2477">      return builder.build();</span>
-<span class="source-line-no">2478</span><span id="line-2478">    } catch (Exception e) {</span>
-<span class="source-line-no">2479</span><span id="line-2479">      throw new ServiceException(e);</span>
-<span class="source-line-no">2480</span><span id="line-2480">    }</span>
-<span class="source-line-no">2481</span><span id="line-2481">  }</span>
-<span class="source-line-no">2482</span><span id="line-2482"></span>
-<span class="source-line-no">2483</span><span id="line-2483">  @Override</span>
-<span class="source-line-no">2484</span><span id="line-2484">  public GetQuotaStatesResponse getQuotaStates(RpcController controller,</span>
-<span class="source-line-no">2485</span><span id="line-2485">    GetQuotaStatesRequest request) throws ServiceException {</span>
-<span class="source-line-no">2486</span><span id="line-2486">    try {</span>
-<span class="source-line-no">2487</span><span id="line-2487">      server.checkInitialized();</span>
-<span class="source-line-no">2488</span><span id="line-2488">      QuotaObserverChore quotaChore = this.server.getQuotaObserverChore();</span>
-<span class="source-line-no">2489</span><span id="line-2489">      GetQuotaStatesResponse.Builder builder = GetQuotaStatesResponse.newBuilder();</span>
-<span class="source-line-no">2490</span><span id="line-2490">      if (quotaChore != null) {</span>
-<span class="source-line-no">2491</span><span id="line-2491">        // The "current" view of all tables with quotas</span>
-<span class="source-line-no">2492</span><span id="line-2492">        Map&lt;TableName, SpaceQuotaSnapshot&gt; tableSnapshots = quotaChore.getTableQuotaSnapshots();</span>
-<span class="source-line-no">2493</span><span id="line-2493">        for (Entry&lt;TableName, SpaceQuotaSnapshot&gt; entry : tableSnapshots.entrySet()) {</span>
-<span class="source-line-no">2494</span><span id="line-2494">          builder.addTableSnapshots(TableQuotaSnapshot.newBuilder()</span>
-<span class="source-line-no">2495</span><span id="line-2495">            .setTableName(ProtobufUtil.toProtoTableName(entry.getKey()))</span>
-<span class="source-line-no">2496</span><span id="line-2496">            .setSnapshot(SpaceQuotaSnapshot.toProtoSnapshot(entry.getValue())).build());</span>
-<span class="source-line-no">2497</span><span id="line-2497">        }</span>
-<span class="source-line-no">2498</span><span id="line-2498">        // The "current" view of all namespaces with quotas</span>
-<span class="source-line-no">2499</span><span id="line-2499">        Map&lt;String, SpaceQuotaSnapshot&gt; nsSnapshots = quotaChore.getNamespaceQuotaSnapshots();</span>
-<span class="source-line-no">2500</span><span id="line-2500">        for (Entry&lt;String, SpaceQuotaSnapshot&gt; entry : nsSnapshots.entrySet()) {</span>
-<span class="source-line-no">2501</span><span id="line-2501">          builder.addNsSnapshots(NamespaceQuotaSnapshot.newBuilder().setNamespace(entry.getKey())</span>
-<span class="source-line-no">2502</span><span id="line-2502">            .setSnapshot(SpaceQuotaSnapshot.toProtoSnapshot(entry.getValue())).build());</span>
-<span class="source-line-no">2503</span><span id="line-2503">        }</span>
-<span class="source-line-no">2504</span><span id="line-2504">        return builder.build();</span>
-<span class="source-line-no">2505</span><span id="line-2505">      }</span>
-<span class="source-line-no">2506</span><span id="line-2506">      return builder.build();</span>
-<span class="source-line-no">2507</span><span id="line-2507">    } catch (Exception e) {</span>
-<span class="source-line-no">2508</span><span id="line-2508">      throw new ServiceException(e);</span>
-<span class="source-line-no">2509</span><span id="line-2509">    }</span>
-<span class="source-line-no">2510</span><span id="line-2510">  }</span>
-<span class="source-line-no">2511</span><span id="line-2511"></span>
-<span class="source-line-no">2512</span><span id="line-2512">  @Override</span>
-<span class="source-line-no">2513</span><span id="line-2513">  public ClearDeadServersResponse clearDeadServers(RpcController controller,</span>
-<span class="source-line-no">2514</span><span id="line-2514">    ClearDeadServersRequest request) throws ServiceException {</span>
-<span class="source-line-no">2515</span><span id="line-2515">    LOG.debug(server.getClientIdAuditPrefix() + " clear dead region servers.");</span>
-<span class="source-line-no">2516</span><span id="line-2516">    ClearDeadServersResponse.Builder response = ClearDeadServersResponse.newBuilder();</span>
-<span class="source-line-no">2517</span><span id="line-2517">    try {</span>
-<span class="source-line-no">2518</span><span id="line-2518">      server.checkInitialized();</span>
-<span class="source-line-no">2519</span><span id="line-2519">      if (server.cpHost != null) {</span>
-<span class="source-line-no">2520</span><span id="line-2520">        server.cpHost.preClearDeadServers();</span>
-<span class="source-line-no">2521</span><span id="line-2521">      }</span>
-<span class="source-line-no">2522</span><span id="line-2522"></span>
-<span class="source-line-no">2523</span><span id="line-2523">      if (server.getServerManager().areDeadServersInProgress()) {</span>
-<span class="source-line-no">2524</span><span id="line-2524">        LOG.debug("Some dead server is still under processing, won't clear the dead server list");</span>
-<span class="source-line-no">2525</span><span id="line-2525">        response.addAllServerName(request.getServerNameList());</span>
-<span class="source-line-no">2526</span><span id="line-2526">      } else {</span>
-<span class="source-line-no">2527</span><span id="line-2527">        DeadServer deadServer = server.getServerManager().getDeadServers();</span>
-<span class="source-line-no">2528</span><span id="line-2528">        Set&lt;Address&gt; clearedServers = new HashSet&lt;&gt;();</span>
-<span class="source-line-no">2529</span><span id="line-2529">        for (HBaseProtos.ServerName pbServer : request.getServerNameList()) {</span>
-<span class="source-line-no">2530</span><span id="line-2530">          ServerName serverName = ProtobufUtil.toServerName(pbServer);</span>
-<span class="source-line-no">2531</span><span id="line-2531">          final boolean deadInProcess =</span>
-<span class="source-line-no">2532</span><span id="line-2532">            server.getProcedures().stream().anyMatch(p -&gt; (p instanceof ServerCrashProcedure)</span>
-<span class="source-line-no">2533</span><span id="line-2533">              &amp;&amp; ((ServerCrashProcedure) p).getServerName().equals(serverName));</span>
-<span class="source-line-no">2534</span><span id="line-2534">          if (deadInProcess) {</span>
-<span class="source-line-no">2535</span><span id="line-2535">            throw new ServiceException(</span>
-<span class="source-line-no">2536</span><span id="line-2536">              String.format("Dead server '%s' is not 'dead' in fact...", serverName));</span>
-<span class="source-line-no">2537</span><span id="line-2537">          }</span>
-<span class="source-line-no">2538</span><span id="line-2538"></span>
-<span class="source-line-no">2539</span><span id="line-2539">          if (!deadServer.removeDeadServer(serverName)) {</span>
-<span class="source-line-no">2540</span><span id="line-2540">            response.addServerName(pbServer);</span>
-<span class="source-line-no">2541</span><span id="line-2541">          } else {</span>
-<span class="source-line-no">2542</span><span id="line-2542">            clearedServers.add(serverName.getAddress());</span>
-<span class="source-line-no">2543</span><span id="line-2543">          }</span>
-<span class="source-line-no">2544</span><span id="line-2544">        }</span>
-<span class="source-line-no">2545</span><span id="line-2545">        server.getRSGroupInfoManager().removeServers(clearedServers);</span>
-<span class="source-line-no">2546</span><span id="line-2546">        LOG.info("Remove decommissioned servers {} from RSGroup done", clearedServers);</span>
-<span class="source-line-no">2547</span><span id="line-2547">      }</span>
-<span class="source-line-no">2548</span><span id="line-2548"></span>
-<span class="source-line-no">2549</span><span id="line-2549">      if (server.cpHost != null) {</span>
-<span class="source-line-no">2550</span><span id="line-2550">        server.cpHost.postClearDeadServers(</span>
-<span class="source-line-no">2551</span><span id="line-2551">          ProtobufUtil.toServerNameList(request.getServerNameList()),</span>
-<span class="source-line-no">2552</span><span id="line-2552">          ProtobufUtil.toServerNameList(response.getServerNameList()));</span>
-<span class="source-line-no">2553</span><span id="line-2553">      }</span>
-<span class="source-line-no">2554</span><span id="line-2554">    } catch (IOException io) {</span>
-<span class="source-line-no">2555</span><span id="line-2555">      throw new ServiceException(io);</span>
-<span class="source-line-no">2556</span><span id="line-2556">    }</span>
-<span class="source-line-no">2557</span><span id="line-2557">    return response.build();</span>
-<span class="source-line-no">2558</span><span id="line-2558">  }</span>
-<span class="source-line-no">2559</span><span id="line-2559"></span>
-<span class="source-line-no">2560</span><span id="line-2560">  @Override</span>
-<span class="source-line-no">2561</span><span id="line-2561">  public ReportProcedureDoneResponse reportProcedureDone(RpcController controller,</span>
-<span class="source-line-no">2562</span><span id="line-2562">    ReportProcedureDoneRequest request) throws ServiceException {</span>
-<span class="source-line-no">2563</span><span id="line-2563">    // Check Masters is up and ready for duty before progressing. Remote side will keep trying.</span>
-<span class="source-line-no">2564</span><span id="line-2564">    try {</span>
-<span class="source-line-no">2565</span><span id="line-2565">      this.server.checkServiceStarted();</span>
-<span class="source-line-no">2566</span><span id="line-2566">      for (RemoteProcedureResult result : request.getResultList()) {</span>
-<span class="source-line-no">2567</span><span id="line-2567">        // -1 is less than any possible MasterActiveCode</span>
-<span class="source-line-no">2568</span><span id="line-2568">        long initiatingMasterActiveTime =</span>
-<span class="source-line-no">2569</span><span id="line-2569">          result.hasInitiatingMasterActiveTime() ? result.getInitiatingMasterActiveTime() : -1;</span>
-<span class="source-line-no">2570</span><span id="line-2570">        throwOnOldMaster(result.getProcId(), initiatingMasterActiveTime);</span>
-<span class="source-line-no">2571</span><span id="line-2571">      }</span>
-<span class="source-line-no">2572</span><span id="line-2572">    } catch (IOException ioe) {</span>
-<span class="source-line-no">2573</span><span id="line-2573">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2574</span><span id="line-2574">    }</span>
-<span class="source-line-no">2575</span><span id="line-2575">    request.getResultList().forEach(result -&gt; {</span>
-<span class="source-line-no">2576</span><span id="line-2576">      if (result.getStatus() == RemoteProcedureResult.Status.SUCCESS) {</span>
-<span class="source-line-no">2577</span><span id="line-2577">        server.remoteProcedureCompleted(result.getProcId());</span>
-<span class="source-line-no">2578</span><span id="line-2578">      } else {</span>
-<span class="source-line-no">2579</span><span id="line-2579">        server.remoteProcedureFailed(result.getProcId(),</span>
-<span class="source-line-no">2580</span><span id="line-2580">          RemoteProcedureException.fromProto(result.getError()));</span>
-<span class="source-line-no">2581</span><span id="line-2581">      }</span>
-<span class="source-line-no">2582</span><span id="line-2582">    });</span>
-<span class="source-line-no">2583</span><span id="line-2583">    return ReportProcedureDoneResponse.getDefaultInstance();</span>
-<span class="source-line-no">2584</span><span id="line-2584">  }</span>
-<span class="source-line-no">2585</span><span id="line-2585"></span>
-<span class="source-line-no">2586</span><span id="line-2586">  private void throwOnOldMaster(long procId, long initiatingMasterActiveTime)</span>
-<span class="source-line-no">2587</span><span id="line-2587">    throws MasterNotRunningException {</span>
-<span class="source-line-no">2588</span><span id="line-2588">    if (initiatingMasterActiveTime &gt; server.getMasterActiveTime()) {</span>
-<span class="source-line-no">2589</span><span id="line-2589">      // procedure is initiated by new active master but report received on master with older active</span>
-<span class="source-line-no">2590</span><span id="line-2590">      // time</span>
-<span class="source-line-no">2591</span><span id="line-2591">      LOG.warn(</span>
-<span class="source-line-no">2592</span><span id="line-2592">        "Report for procId: {} and initiatingMasterAT {} received on master with activeTime {}",</span>
-<span class="source-line-no">2593</span><span id="line-2593">        procId, initiatingMasterActiveTime, server.getMasterActiveTime());</span>
-<span class="source-line-no">2594</span><span id="line-2594">      throw new MasterNotRunningException("Another master is active");</span>
-<span class="source-line-no">2595</span><span id="line-2595">    }</span>
-<span class="source-line-no">2596</span><span id="line-2596">  }</span>
-<span class="source-line-no">2597</span><span id="line-2597"></span>
-<span class="source-line-no">2598</span><span id="line-2598">  @Override</span>
-<span class="source-line-no">2599</span><span id="line-2599">  public FileArchiveNotificationResponse reportFileArchival(RpcController controller,</span>
-<span class="source-line-no">2600</span><span id="line-2600">    FileArchiveNotificationRequest request) throws ServiceException {</span>
-<span class="source-line-no">2601</span><span id="line-2601">    try {</span>
-<span class="source-line-no">2602</span><span id="line-2602">      server.checkInitialized();</span>
-<span class="source-line-no">2603</span><span id="line-2603">      if (!QuotaUtil.isQuotaEnabled(server.getConfiguration())) {</span>
-<span class="source-line-no">2604</span><span id="line-2604">        return FileArchiveNotificationResponse.newBuilder().build();</span>
-<span class="source-line-no">2605</span><span id="line-2605">      }</span>
-<span class="source-line-no">2606</span><span id="line-2606">      server.getMasterQuotaManager().processFileArchivals(request, server.getConnection(),</span>
-<span class="source-line-no">2607</span><span id="line-2607">        server.getConfiguration(), server.getFileSystem());</span>
-<span class="source-line-no">2608</span><span id="line-2608">      return FileArchiveNotificationResponse.newBuilder().build();</span>
-<span class="source-line-no">2609</span><span id="line-2609">    } catch (Exception e) {</span>
-<span class="source-line-no">2610</span><span id="line-2610">      throw new ServiceException(e);</span>
-<span class="source-line-no">2611</span><span id="line-2611">    }</span>
-<span class="source-line-no">2612</span><span id="line-2612">  }</span>
+<span class="source-line-no">1772</span><span id="line-1772">      // If there is nonce group and nonce in the snapshot request, then the client can</span>
+<span class="source-line-no">1773</span><span id="line-1773">      // handle snapshot procedure procId. And if enable the snapshot procedure, we</span>
+<span class="source-line-no">1774</span><span id="line-1774">      // will do the snapshot work with proc-v2, otherwise we will fall back to zk proc.</span>
+<span class="source-line-no">1775</span><span id="line-1775">      if (</span>
+<span class="source-line-no">1776</span><span id="line-1776">        request.hasNonceGroup() &amp;&amp; request.hasNonce()</span>
+<span class="source-line-no">1777</span><span id="line-1777">          &amp;&amp; server.snapshotManager.snapshotProcedureEnabled()</span>
+<span class="source-line-no">1778</span><span id="line-1778">      ) {</span>
+<span class="source-line-no">1779</span><span id="line-1779">        long nonceGroup = request.getNonceGroup();</span>
+<span class="source-line-no">1780</span><span id="line-1780">        long nonce = request.getNonce();</span>
+<span class="source-line-no">1781</span><span id="line-1781">        long procId = server.snapshotManager.takeSnapshot(snapshot, nonceGroup, nonce);</span>
+<span class="source-line-no">1782</span><span id="line-1782">        return builder.setProcId(procId).build();</span>
+<span class="source-line-no">1783</span><span id="line-1783">      } else {</span>
+<span class="source-line-no">1784</span><span id="line-1784">        server.snapshotManager.takeSnapshot(snapshot);</span>
+<span class="source-line-no">1785</span><span id="line-1785">        return builder.build();</span>
+<span class="source-line-no">1786</span><span id="line-1786">      }</span>
+<span class="source-line-no">1787</span><span id="line-1787">    } catch (ForeignException e) {</span>
+<span class="source-line-no">1788</span><span id="line-1788">      throw new ServiceException(e.getCause());</span>
+<span class="source-line-no">1789</span><span id="line-1789">    } catch (IOException e) {</span>
+<span class="source-line-no">1790</span><span id="line-1790">      throw new ServiceException(e);</span>
+<span class="source-line-no">1791</span><span id="line-1791">    }</span>
+<span class="source-line-no">1792</span><span id="line-1792">  }</span>
+<span class="source-line-no">1793</span><span id="line-1793"></span>
+<span class="source-line-no">1794</span><span id="line-1794">  @Override</span>
+<span class="source-line-no">1795</span><span id="line-1795">  public StopMasterResponse stopMaster(RpcController controller, StopMasterRequest request)</span>
+<span class="source-line-no">1796</span><span id="line-1796">    throws ServiceException {</span>
+<span class="source-line-no">1797</span><span id="line-1797">    LOG.info(server.getClientIdAuditPrefix() + " stop");</span>
+<span class="source-line-no">1798</span><span id="line-1798">    try {</span>
+<span class="source-line-no">1799</span><span id="line-1799">      server.stopMaster();</span>
+<span class="source-line-no">1800</span><span id="line-1800">    } catch (IOException e) {</span>
+<span class="source-line-no">1801</span><span id="line-1801">      LOG.error("Exception occurred while stopping master", e);</span>
+<span class="source-line-no">1802</span><span id="line-1802">      throw new ServiceException(e);</span>
+<span class="source-line-no">1803</span><span id="line-1803">    }</span>
+<span class="source-line-no">1804</span><span id="line-1804">    return StopMasterResponse.newBuilder().build();</span>
+<span class="source-line-no">1805</span><span id="line-1805">  }</span>
+<span class="source-line-no">1806</span><span id="line-1806"></span>
+<span class="source-line-no">1807</span><span id="line-1807">  @Override</span>
+<span class="source-line-no">1808</span><span id="line-1808">  public IsInMaintenanceModeResponse isMasterInMaintenanceMode(final RpcController controller,</span>
+<span class="source-line-no">1809</span><span id="line-1809">    final IsInMaintenanceModeRequest request) throws ServiceException {</span>
+<span class="source-line-no">1810</span><span id="line-1810">    IsInMaintenanceModeResponse.Builder response = IsInMaintenanceModeResponse.newBuilder();</span>
+<span class="source-line-no">1811</span><span id="line-1811">    response.setInMaintenanceMode(server.isInMaintenanceMode());</span>
+<span class="source-line-no">1812</span><span id="line-1812">    return response.build();</span>
+<span class="source-line-no">1813</span><span id="line-1813">  }</span>
+<span class="source-line-no">1814</span><span id="line-1814"></span>
+<span class="source-line-no">1815</span><span id="line-1815">  @Override</span>
+<span class="source-line-no">1816</span><span id="line-1816">  public UnassignRegionResponse unassignRegion(RpcController controller, UnassignRegionRequest req)</span>
+<span class="source-line-no">1817</span><span id="line-1817">    throws ServiceException {</span>
+<span class="source-line-no">1818</span><span id="line-1818">    try {</span>
+<span class="source-line-no">1819</span><span id="line-1819">      final byte[] regionName = req.getRegion().getValue().toByteArray();</span>
+<span class="source-line-no">1820</span><span id="line-1820">      RegionSpecifierType type = req.getRegion().getType();</span>
+<span class="source-line-no">1821</span><span id="line-1821">      UnassignRegionResponse urr = UnassignRegionResponse.newBuilder().build();</span>
+<span class="source-line-no">1822</span><span id="line-1822"></span>
+<span class="source-line-no">1823</span><span id="line-1823">      server.checkInitialized();</span>
+<span class="source-line-no">1824</span><span id="line-1824">      if (type != RegionSpecifierType.REGION_NAME) {</span>
+<span class="source-line-no">1825</span><span id="line-1825">        LOG.warn("unassignRegion specifier type: expected: " + RegionSpecifierType.REGION_NAME</span>
+<span class="source-line-no">1826</span><span id="line-1826">          + " actual: " + type);</span>
+<span class="source-line-no">1827</span><span id="line-1827">      }</span>
+<span class="source-line-no">1828</span><span id="line-1828">      RegionStateNode rsn =</span>
+<span class="source-line-no">1829</span><span id="line-1829">        server.getAssignmentManager().getRegionStates().getRegionStateNodeFromName(regionName);</span>
+<span class="source-line-no">1830</span><span id="line-1830">      if (rsn == null) {</span>
+<span class="source-line-no">1831</span><span id="line-1831">        throw new UnknownRegionException(Bytes.toString(regionName));</span>
+<span class="source-line-no">1832</span><span id="line-1832">      }</span>
+<span class="source-line-no">1833</span><span id="line-1833"></span>
+<span class="source-line-no">1834</span><span id="line-1834">      RegionInfo hri = rsn.getRegionInfo();</span>
+<span class="source-line-no">1835</span><span id="line-1835">      if (server.cpHost != null) {</span>
+<span class="source-line-no">1836</span><span id="line-1836">        server.cpHost.preUnassign(hri);</span>
+<span class="source-line-no">1837</span><span id="line-1837">      }</span>
+<span class="source-line-no">1838</span><span id="line-1838">      LOG.debug(server.getClientIdAuditPrefix() + " unassign " + hri.getRegionNameAsString()</span>
+<span class="source-line-no">1839</span><span id="line-1839">        + " in current location if it is online");</span>
+<span class="source-line-no">1840</span><span id="line-1840">      server.getAssignmentManager().unassign(hri);</span>
+<span class="source-line-no">1841</span><span id="line-1841">      if (server.cpHost != null) {</span>
+<span class="source-line-no">1842</span><span id="line-1842">        server.cpHost.postUnassign(hri);</span>
+<span class="source-line-no">1843</span><span id="line-1843">      }</span>
+<span class="source-line-no">1844</span><span id="line-1844"></span>
+<span class="source-line-no">1845</span><span id="line-1845">      return urr;</span>
+<span class="source-line-no">1846</span><span id="line-1846">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1847</span><span id="line-1847">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1848</span><span id="line-1848">    }</span>
+<span class="source-line-no">1849</span><span id="line-1849">  }</span>
+<span class="source-line-no">1850</span><span id="line-1850"></span>
+<span class="source-line-no">1851</span><span id="line-1851">  @Override</span>
+<span class="source-line-no">1852</span><span id="line-1852">  public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c,</span>
+<span class="source-line-no">1853</span><span id="line-1853">    ReportRegionStateTransitionRequest req) throws ServiceException {</span>
+<span class="source-line-no">1854</span><span id="line-1854">    try {</span>
+<span class="source-line-no">1855</span><span id="line-1855">      server.checkServiceStarted();</span>
+<span class="source-line-no">1856</span><span id="line-1856">      for (RegionServerStatusProtos.RegionStateTransition transition : req.getTransitionList()) {</span>
+<span class="source-line-no">1857</span><span id="line-1857">        long procId =</span>
+<span class="source-line-no">1858</span><span id="line-1858">          transition.getProcIdCount() &gt; 0 ? transition.getProcId(0) : Procedure.NO_PROC_ID;</span>
+<span class="source-line-no">1859</span><span id="line-1859">        // -1 is less than any possible MasterActiveCode</span>
+<span class="source-line-no">1860</span><span id="line-1860">        long initiatingMasterActiveTime = transition.hasInitiatingMasterActiveTime()</span>
+<span class="source-line-no">1861</span><span id="line-1861">          ? transition.getInitiatingMasterActiveTime()</span>
+<span class="source-line-no">1862</span><span id="line-1862">          : -1;</span>
+<span class="source-line-no">1863</span><span id="line-1863">        throwOnOldMaster(procId, initiatingMasterActiveTime);</span>
+<span class="source-line-no">1864</span><span id="line-1864">      }</span>
+<span class="source-line-no">1865</span><span id="line-1865">      return server.getAssignmentManager().reportRegionStateTransition(req);</span>
+<span class="source-line-no">1866</span><span id="line-1866">    } catch (IOException ioe) {</span>
+<span class="source-line-no">1867</span><span id="line-1867">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">1868</span><span id="line-1868">    }</span>
+<span class="source-line-no">1869</span><span id="line-1869">  }</span>
+<span class="source-line-no">1870</span><span id="line-1870"></span>
+<span class="source-line-no">1871</span><span id="line-1871">  @Override</span>
+<span class="source-line-no">1872</span><span id="line-1872">  public SetQuotaResponse setQuota(RpcController c, SetQuotaRequest req) throws ServiceException {</span>
+<span class="source-line-no">1873</span><span id="line-1873">    try {</span>
+<span class="source-line-no">1874</span><span id="line-1874">      server.checkInitialized();</span>
+<span class="source-line-no">1875</span><span id="line-1875">      return server.getMasterQuotaManager().setQuota(req);</span>
+<span class="source-line-no">1876</span><span id="line-1876">    } catch (Exception e) {</span>
+<span class="source-line-no">1877</span><span id="line-1877">      throw new ServiceException(e);</span>
+<span class="source-line-no">1878</span><span id="line-1878">    }</span>
+<span class="source-line-no">1879</span><span id="line-1879">  }</span>
+<span class="source-line-no">1880</span><span id="line-1880"></span>
+<span class="source-line-no">1881</span><span id="line-1881">  @Override</span>
+<span class="source-line-no">1882</span><span id="line-1882">  public MajorCompactionTimestampResponse getLastMajorCompactionTimestamp(RpcController controller,</span>
+<span class="source-line-no">1883</span><span id="line-1883">    MajorCompactionTimestampRequest request) throws ServiceException {</span>
+<span class="source-line-no">1884</span><span id="line-1884">    MajorCompactionTimestampResponse.Builder response =</span>
+<span class="source-line-no">1885</span><span id="line-1885">      MajorCompactionTimestampResponse.newBuilder();</span>
+<span class="source-line-no">1886</span><span id="line-1886">    try {</span>
+<span class="source-line-no">1887</span><span id="line-1887">      server.checkInitialized();</span>
+<span class="source-line-no">1888</span><span id="line-1888">      response.setCompactionTimestamp(</span>
+<span class="source-line-no">1889</span><span id="line-1889">        server.getLastMajorCompactionTimestamp(ProtobufUtil.toTableName(request.getTableName())));</span>
+<span class="source-line-no">1890</span><span id="line-1890">    } catch (IOException e) {</span>
+<span class="source-line-no">1891</span><span id="line-1891">      throw new ServiceException(e);</span>
+<span class="source-line-no">1892</span><span id="line-1892">    }</span>
+<span class="source-line-no">1893</span><span id="line-1893">    return response.build();</span>
+<span class="source-line-no">1894</span><span id="line-1894">  }</span>
+<span class="source-line-no">1895</span><span id="line-1895"></span>
+<span class="source-line-no">1896</span><span id="line-1896">  @Override</span>
+<span class="source-line-no">1897</span><span id="line-1897">  public MajorCompactionTimestampResponse getLastMajorCompactionTimestampForRegion(</span>
+<span class="source-line-no">1898</span><span id="line-1898">    RpcController controller, MajorCompactionTimestampForRegionRequest request)</span>
+<span class="source-line-no">1899</span><span id="line-1899">    throws ServiceException {</span>
+<span class="source-line-no">1900</span><span id="line-1900">    MajorCompactionTimestampResponse.Builder response =</span>
+<span class="source-line-no">1901</span><span id="line-1901">      MajorCompactionTimestampResponse.newBuilder();</span>
+<span class="source-line-no">1902</span><span id="line-1902">    try {</span>
+<span class="source-line-no">1903</span><span id="line-1903">      server.checkInitialized();</span>
+<span class="source-line-no">1904</span><span id="line-1904">      response.setCompactionTimestamp(server</span>
+<span class="source-line-no">1905</span><span id="line-1905">        .getLastMajorCompactionTimestampForRegion(request.getRegion().getValue().toByteArray()));</span>
+<span class="source-line-no">1906</span><span id="line-1906">    } catch (IOException e) {</span>
+<span class="source-line-no">1907</span><span id="line-1907">      throw new ServiceException(e);</span>
+<span class="source-line-no">1908</span><span id="line-1908">    }</span>
+<span class="source-line-no">1909</span><span id="line-1909">    return response.build();</span>
+<span class="source-line-no">1910</span><span id="line-1910">  }</span>
+<span class="source-line-no">1911</span><span id="line-1911"></span>
+<span class="source-line-no">1912</span><span id="line-1912">  @Override</span>
+<span class="source-line-no">1913</span><span id="line-1913">  public IsBalancerEnabledResponse isBalancerEnabled(RpcController controller,</span>
+<span class="source-line-no">1914</span><span id="line-1914">    IsBalancerEnabledRequest request) throws ServiceException {</span>
+<span class="source-line-no">1915</span><span id="line-1915">    IsBalancerEnabledResponse.Builder response = IsBalancerEnabledResponse.newBuilder();</span>
+<span class="source-line-no">1916</span><span id="line-1916">    response.setEnabled(server.isBalancerOn());</span>
+<span class="source-line-no">1917</span><span id="line-1917">    return response.build();</span>
+<span class="source-line-no">1918</span><span id="line-1918">  }</span>
+<span class="source-line-no">1919</span><span id="line-1919"></span>
+<span class="source-line-no">1920</span><span id="line-1920">  @Override</span>
+<span class="source-line-no">1921</span><span id="line-1921">  public SetSplitOrMergeEnabledResponse setSplitOrMergeEnabled(RpcController controller,</span>
+<span class="source-line-no">1922</span><span id="line-1922">    SetSplitOrMergeEnabledRequest request) throws ServiceException {</span>
+<span class="source-line-no">1923</span><span id="line-1923">    SetSplitOrMergeEnabledResponse.Builder response = SetSplitOrMergeEnabledResponse.newBuilder();</span>
+<span class="source-line-no">1924</span><span id="line-1924">    try {</span>
+<span class="source-line-no">1925</span><span id="line-1925">      server.checkInitialized();</span>
+<span class="source-line-no">1926</span><span id="line-1926">      boolean newValue = request.getEnabled();</span>
+<span class="source-line-no">1927</span><span id="line-1927">      for (MasterProtos.MasterSwitchType masterSwitchType : request.getSwitchTypesList()) {</span>
+<span class="source-line-no">1928</span><span id="line-1928">        MasterSwitchType switchType = convert(masterSwitchType);</span>
+<span class="source-line-no">1929</span><span id="line-1929">        boolean oldValue = server.isSplitOrMergeEnabled(switchType);</span>
+<span class="source-line-no">1930</span><span id="line-1930">        response.addPrevValue(oldValue);</span>
+<span class="source-line-no">1931</span><span id="line-1931">        if (server.cpHost != null) {</span>
+<span class="source-line-no">1932</span><span id="line-1932">          server.cpHost.preSetSplitOrMergeEnabled(newValue, switchType);</span>
+<span class="source-line-no">1933</span><span id="line-1933">        }</span>
+<span class="source-line-no">1934</span><span id="line-1934">        server.getSplitOrMergeStateStore().setSplitOrMergeEnabled(newValue, switchType);</span>
+<span class="source-line-no">1935</span><span id="line-1935">        if (server.cpHost != null) {</span>
+<span class="source-line-no">1936</span><span id="line-1936">          server.cpHost.postSetSplitOrMergeEnabled(newValue, switchType);</span>
+<span class="source-line-no">1937</span><span id="line-1937">        }</span>
+<span class="source-line-no">1938</span><span id="line-1938">      }</span>
+<span class="source-line-no">1939</span><span id="line-1939">    } catch (IOException e) {</span>
+<span class="source-line-no">1940</span><span id="line-1940">      throw new ServiceException(e);</span>
+<span class="source-line-no">1941</span><span id="line-1941">    }</span>
+<span class="source-line-no">1942</span><span id="line-1942">    return response.build();</span>
+<span class="source-line-no">1943</span><span id="line-1943">  }</span>
+<span class="source-line-no">1944</span><span id="line-1944"></span>
+<span class="source-line-no">1945</span><span id="line-1945">  @Override</span>
+<span class="source-line-no">1946</span><span id="line-1946">  public IsSplitOrMergeEnabledResponse isSplitOrMergeEnabled(RpcController controller,</span>
+<span class="source-line-no">1947</span><span id="line-1947">    IsSplitOrMergeEnabledRequest request) throws ServiceException {</span>
+<span class="source-line-no">1948</span><span id="line-1948">    IsSplitOrMergeEnabledResponse.Builder response = IsSplitOrMergeEnabledResponse.newBuilder();</span>
+<span class="source-line-no">1949</span><span id="line-1949">    response.setEnabled(server.isSplitOrMergeEnabled(convert(request.getSwitchType())));</span>
+<span class="source-line-no">1950</span><span id="line-1950">    return response.build();</span>
+<span class="source-line-no">1951</span><span id="line-1951">  }</span>
+<span class="source-line-no">1952</span><span id="line-1952"></span>
+<span class="source-line-no">1953</span><span id="line-1953">  @Override</span>
+<span class="source-line-no">1954</span><span id="line-1954">  public NormalizeResponse normalize(RpcController controller, NormalizeRequest request)</span>
+<span class="source-line-no">1955</span><span id="line-1955">    throws ServiceException {</span>
+<span class="source-line-no">1956</span><span id="line-1956">    rpcPreCheck("normalize");</span>
+<span class="source-line-no">1957</span><span id="line-1957">    try {</span>
+<span class="source-line-no">1958</span><span id="line-1958">      final NormalizeTableFilterParams ntfp = new NormalizeTableFilterParams.Builder()</span>
+<span class="source-line-no">1959</span><span id="line-1959">        .tableNames(ProtobufUtil.toTableNameList(request.getTableNamesList()))</span>
+<span class="source-line-no">1960</span><span id="line-1960">        .regex(request.hasRegex() ? request.getRegex() : null)</span>
+<span class="source-line-no">1961</span><span id="line-1961">        .namespace(request.hasNamespace() ? request.getNamespace() : null).build();</span>
+<span class="source-line-no">1962</span><span id="line-1962">      return NormalizeResponse.newBuilder()</span>
+<span class="source-line-no">1963</span><span id="line-1963">        // all API requests are considered priority requests.</span>
+<span class="source-line-no">1964</span><span id="line-1964">        .setNormalizerRan(server.normalizeRegions(ntfp, true)).build();</span>
+<span class="source-line-no">1965</span><span id="line-1965">    } catch (IOException ex) {</span>
+<span class="source-line-no">1966</span><span id="line-1966">      throw new ServiceException(ex);</span>
+<span class="source-line-no">1967</span><span id="line-1967">    }</span>
+<span class="source-line-no">1968</span><span id="line-1968">  }</span>
+<span class="source-line-no">1969</span><span id="line-1969"></span>
+<span class="source-line-no">1970</span><span id="line-1970">  @Override</span>
+<span class="source-line-no">1971</span><span id="line-1971">  public SetNormalizerRunningResponse setNormalizerRunning(RpcController controller,</span>
+<span class="source-line-no">1972</span><span id="line-1972">    SetNormalizerRunningRequest request) throws ServiceException {</span>
+<span class="source-line-no">1973</span><span id="line-1973">    rpcPreCheck("setNormalizerRunning");</span>
+<span class="source-line-no">1974</span><span id="line-1974"></span>
+<span class="source-line-no">1975</span><span id="line-1975">    // Sets normalizer on/off flag in ZK.</span>
+<span class="source-line-no">1976</span><span id="line-1976">    // TODO: this method is totally broken in terms of atomicity of actions and values read.</span>
+<span class="source-line-no">1977</span><span id="line-1977">    // 1. The contract has this RPC returning the previous value. There isn't a ZKUtil method</span>
+<span class="source-line-no">1978</span><span id="line-1978">    // that lets us retrieve the previous value as part of setting a new value, so we simply</span>
+<span class="source-line-no">1979</span><span id="line-1979">    // perform a read before issuing the update. Thus we have a data race opportunity, between</span>
+<span class="source-line-no">1980</span><span id="line-1980">    // when the `prevValue` is read and whatever is actually overwritten.</span>
+<span class="source-line-no">1981</span><span id="line-1981">    // 2. Down in `setNormalizerOn`, the call to `createAndWatch` inside of the catch clause can</span>
+<span class="source-line-no">1982</span><span id="line-1982">    // itself fail in the event that the znode already exists. Thus, another data race, between</span>
+<span class="source-line-no">1983</span><span id="line-1983">    // when the initial `setData` call is notified of the absence of the target znode and the</span>
+<span class="source-line-no">1984</span><span id="line-1984">    // subsequent `createAndWatch`, with another client creating said node.</span>
+<span class="source-line-no">1985</span><span id="line-1985">    // That said, there's supposed to be only one active master and thus there's supposed to be</span>
+<span class="source-line-no">1986</span><span id="line-1986">    // only one process with the authority to modify the value.</span>
+<span class="source-line-no">1987</span><span id="line-1987">    final boolean prevValue = server.getRegionNormalizerManager().isNormalizerOn();</span>
+<span class="source-line-no">1988</span><span id="line-1988">    final boolean newValue = request.getOn();</span>
+<span class="source-line-no">1989</span><span id="line-1989">    try {</span>
+<span class="source-line-no">1990</span><span id="line-1990">      server.getRegionNormalizerManager().setNormalizerOn(newValue);</span>
+<span class="source-line-no">1991</span><span id="line-1991">    } catch (IOException e) {</span>
+<span class="source-line-no">1992</span><span id="line-1992">      throw new ServiceException(e);</span>
+<span class="source-line-no">1993</span><span id="line-1993">    }</span>
+<span class="source-line-no">1994</span><span id="line-1994">    LOG.info("{} set normalizerSwitch={}", server.getClientIdAuditPrefix(), newValue);</span>
+<span class="source-line-no">1995</span><span id="line-1995">    return SetNormalizerRunningResponse.newBuilder().setPrevNormalizerValue(prevValue).build();</span>
+<span class="source-line-no">1996</span><span id="line-1996">  }</span>
+<span class="source-line-no">1997</span><span id="line-1997"></span>
+<span class="source-line-no">1998</span><span id="line-1998">  @Override</span>
+<span class="source-line-no">1999</span><span id="line-1999">  public IsNormalizerEnabledResponse isNormalizerEnabled(RpcController controller,</span>
+<span class="source-line-no">2000</span><span id="line-2000">    IsNormalizerEnabledRequest request) {</span>
+<span class="source-line-no">2001</span><span id="line-2001">    IsNormalizerEnabledResponse.Builder response = IsNormalizerEnabledResponse.newBuilder();</span>
+<span class="source-line-no">2002</span><span id="line-2002">    response.setEnabled(server.isNormalizerOn());</span>
+<span class="source-line-no">2003</span><span id="line-2003">    return response.build();</span>
+<span class="source-line-no">2004</span><span id="line-2004">  }</span>
+<span class="source-line-no">2005</span><span id="line-2005"></span>
+<span class="source-line-no">2006</span><span id="line-2006">  /**</span>
+<span class="source-line-no">2007</span><span id="line-2007">   * Returns the security capabilities in effect on the cluster</span>
+<span class="source-line-no">2008</span><span id="line-2008">   */</span>
+<span class="source-line-no">2009</span><span id="line-2009">  @Override</span>
+<span class="source-line-no">2010</span><span id="line-2010">  public SecurityCapabilitiesResponse getSecurityCapabilities(RpcController controller,</span>
+<span class="source-line-no">2011</span><span id="line-2011">    SecurityCapabilitiesRequest request) throws ServiceException {</span>
+<span class="source-line-no">2012</span><span id="line-2012">    SecurityCapabilitiesResponse.Builder response = SecurityCapabilitiesResponse.newBuilder();</span>
+<span class="source-line-no">2013</span><span id="line-2013">    try {</span>
+<span class="source-line-no">2014</span><span id="line-2014">      server.checkInitialized();</span>
+<span class="source-line-no">2015</span><span id="line-2015">      Set&lt;SecurityCapabilitiesResponse.Capability&gt; capabilities = new HashSet&lt;&gt;();</span>
+<span class="source-line-no">2016</span><span id="line-2016">      // Authentication</span>
+<span class="source-line-no">2017</span><span id="line-2017">      if (User.isHBaseSecurityEnabled(server.getConfiguration())) {</span>
+<span class="source-line-no">2018</span><span id="line-2018">        capabilities.add(SecurityCapabilitiesResponse.Capability.SECURE_AUTHENTICATION);</span>
+<span class="source-line-no">2019</span><span id="line-2019">      } else {</span>
+<span class="source-line-no">2020</span><span id="line-2020">        capabilities.add(SecurityCapabilitiesResponse.Capability.SIMPLE_AUTHENTICATION);</span>
+<span class="source-line-no">2021</span><span id="line-2021">      }</span>
+<span class="source-line-no">2022</span><span id="line-2022">      // A coprocessor that implements AccessControlService can provide AUTHORIZATION and</span>
+<span class="source-line-no">2023</span><span id="line-2023">      // CELL_AUTHORIZATION</span>
+<span class="source-line-no">2024</span><span id="line-2024">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
+<span class="source-line-no">2025</span><span id="line-2025">        if (AccessChecker.isAuthorizationSupported(server.getConfiguration())) {</span>
+<span class="source-line-no">2026</span><span id="line-2026">          capabilities.add(SecurityCapabilitiesResponse.Capability.AUTHORIZATION);</span>
+<span class="source-line-no">2027</span><span id="line-2027">        }</span>
+<span class="source-line-no">2028</span><span id="line-2028">        if (AccessController.isCellAuthorizationSupported(server.getConfiguration())) {</span>
+<span class="source-line-no">2029</span><span id="line-2029">          capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_AUTHORIZATION);</span>
+<span class="source-line-no">2030</span><span id="line-2030">        }</span>
+<span class="source-line-no">2031</span><span id="line-2031">      }</span>
+<span class="source-line-no">2032</span><span id="line-2032">      // A coprocessor that implements VisibilityLabelsService can provide CELL_VISIBILITY.</span>
+<span class="source-line-no">2033</span><span id="line-2033">      if (server.cpHost != null &amp;&amp; hasVisibilityLabelsServiceCoprocessor(server.cpHost)) {</span>
+<span class="source-line-no">2034</span><span id="line-2034">        if (VisibilityController.isCellAuthorizationSupported(server.getConfiguration())) {</span>
+<span class="source-line-no">2035</span><span id="line-2035">          capabilities.add(SecurityCapabilitiesResponse.Capability.CELL_VISIBILITY);</span>
+<span class="source-line-no">2036</span><span id="line-2036">        }</span>
+<span class="source-line-no">2037</span><span id="line-2037">      }</span>
+<span class="source-line-no">2038</span><span id="line-2038">      response.addAllCapabilities(capabilities);</span>
+<span class="source-line-no">2039</span><span id="line-2039">    } catch (IOException e) {</span>
+<span class="source-line-no">2040</span><span id="line-2040">      throw new ServiceException(e);</span>
+<span class="source-line-no">2041</span><span id="line-2041">    }</span>
+<span class="source-line-no">2042</span><span id="line-2042">    return response.build();</span>
+<span class="source-line-no">2043</span><span id="line-2043">  }</span>
+<span class="source-line-no">2044</span><span id="line-2044"></span>
+<span class="source-line-no">2045</span><span id="line-2045">  /**</span>
+<span class="source-line-no">2046</span><span id="line-2046">   * Determines if there is a MasterCoprocessor deployed which implements</span>
+<span class="source-line-no">2047</span><span id="line-2047">   * {@link AccessControlService.Interface}.</span>
+<span class="source-line-no">2048</span><span id="line-2048">   */</span>
+<span class="source-line-no">2049</span><span id="line-2049">  boolean hasAccessControlServiceCoprocessor(MasterCoprocessorHost cpHost) {</span>
+<span class="source-line-no">2050</span><span id="line-2050">    return checkCoprocessorWithService(cpHost.findCoprocessors(MasterCoprocessor.class),</span>
+<span class="source-line-no">2051</span><span id="line-2051">      AccessControlService.Interface.class);</span>
+<span class="source-line-no">2052</span><span id="line-2052">  }</span>
+<span class="source-line-no">2053</span><span id="line-2053"></span>
+<span class="source-line-no">2054</span><span id="line-2054">  /**</span>
+<span class="source-line-no">2055</span><span id="line-2055">   * Determines if there is a MasterCoprocessor deployed which implements</span>
+<span class="source-line-no">2056</span><span id="line-2056">   * {@link VisibilityLabelsService.Interface}.</span>
+<span class="source-line-no">2057</span><span id="line-2057">   */</span>
+<span class="source-line-no">2058</span><span id="line-2058">  boolean hasVisibilityLabelsServiceCoprocessor(MasterCoprocessorHost cpHost) {</span>
+<span class="source-line-no">2059</span><span id="line-2059">    return checkCoprocessorWithService(cpHost.findCoprocessors(MasterCoprocessor.class),</span>
+<span class="source-line-no">2060</span><span id="line-2060">      VisibilityLabelsService.Interface.class);</span>
+<span class="source-line-no">2061</span><span id="line-2061">  }</span>
+<span class="source-line-no">2062</span><span id="line-2062"></span>
+<span class="source-line-no">2063</span><span id="line-2063">  /**</span>
+<span class="source-line-no">2064</span><span id="line-2064">   * Determines if there is a coprocessor implementation in the provided argument which extends or</span>
+<span class="source-line-no">2065</span><span id="line-2065">   * implements the provided {@code service}.</span>
+<span class="source-line-no">2066</span><span id="line-2066">   */</span>
+<span class="source-line-no">2067</span><span id="line-2067">  boolean checkCoprocessorWithService(List&lt;MasterCoprocessor&gt; coprocessorsToCheck,</span>
+<span class="source-line-no">2068</span><span id="line-2068">    Class&lt;?&gt; service) {</span>
+<span class="source-line-no">2069</span><span id="line-2069">    if (coprocessorsToCheck == null || coprocessorsToCheck.isEmpty()) {</span>
+<span class="source-line-no">2070</span><span id="line-2070">      return false;</span>
+<span class="source-line-no">2071</span><span id="line-2071">    }</span>
+<span class="source-line-no">2072</span><span id="line-2072">    for (MasterCoprocessor cp : coprocessorsToCheck) {</span>
+<span class="source-line-no">2073</span><span id="line-2073">      if (service.isAssignableFrom(cp.getClass())) {</span>
+<span class="source-line-no">2074</span><span id="line-2074">        return true;</span>
+<span class="source-line-no">2075</span><span id="line-2075">      }</span>
+<span class="source-line-no">2076</span><span id="line-2076">    }</span>
+<span class="source-line-no">2077</span><span id="line-2077">    return false;</span>
+<span class="source-line-no">2078</span><span id="line-2078">  }</span>
+<span class="source-line-no">2079</span><span id="line-2079"></span>
+<span class="source-line-no">2080</span><span id="line-2080">  private MasterSwitchType convert(MasterProtos.MasterSwitchType switchType) {</span>
+<span class="source-line-no">2081</span><span id="line-2081">    switch (switchType) {</span>
+<span class="source-line-no">2082</span><span id="line-2082">      case SPLIT:</span>
+<span class="source-line-no">2083</span><span id="line-2083">        return MasterSwitchType.SPLIT;</span>
+<span class="source-line-no">2084</span><span id="line-2084">      case MERGE:</span>
+<span class="source-line-no">2085</span><span id="line-2085">        return MasterSwitchType.MERGE;</span>
+<span class="source-line-no">2086</span><span id="line-2086">      default:</span>
+<span class="source-line-no">2087</span><span id="line-2087">        break;</span>
+<span class="source-line-no">2088</span><span id="line-2088">    }</span>
+<span class="source-line-no">2089</span><span id="line-2089">    return null;</span>
+<span class="source-line-no">2090</span><span id="line-2090">  }</span>
+<span class="source-line-no">2091</span><span id="line-2091"></span>
+<span class="source-line-no">2092</span><span id="line-2092">  @Override</span>
+<span class="source-line-no">2093</span><span id="line-2093">  public AddReplicationPeerResponse addReplicationPeer(RpcController controller,</span>
+<span class="source-line-no">2094</span><span id="line-2094">    AddReplicationPeerRequest request) throws ServiceException {</span>
+<span class="source-line-no">2095</span><span id="line-2095">    try {</span>
+<span class="source-line-no">2096</span><span id="line-2096">      long procId = server.addReplicationPeer(request.getPeerId(),</span>
+<span class="source-line-no">2097</span><span id="line-2097">        ReplicationPeerConfigUtil.convert(request.getPeerConfig()),</span>
+<span class="source-line-no">2098</span><span id="line-2098">        request.getPeerState().getState().equals(ReplicationState.State.ENABLED));</span>
+<span class="source-line-no">2099</span><span id="line-2099">      return AddReplicationPeerResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">2100</span><span id="line-2100">    } catch (ReplicationException | IOException e) {</span>
+<span class="source-line-no">2101</span><span id="line-2101">      throw new ServiceException(e);</span>
+<span class="source-line-no">2102</span><span id="line-2102">    }</span>
+<span class="source-line-no">2103</span><span id="line-2103">  }</span>
+<span class="source-line-no">2104</span><span id="line-2104"></span>
+<span class="source-line-no">2105</span><span id="line-2105">  @Override</span>
+<span class="source-line-no">2106</span><span id="line-2106">  public RemoveReplicationPeerResponse removeReplicationPeer(RpcController controller,</span>
+<span class="source-line-no">2107</span><span id="line-2107">    RemoveReplicationPeerRequest request) throws ServiceException {</span>
+<span class="source-line-no">2108</span><span id="line-2108">    try {</span>
+<span class="source-line-no">2109</span><span id="line-2109">      long procId = server.removeReplicationPeer(request.getPeerId());</span>
+<span class="source-line-no">2110</span><span id="line-2110">      return RemoveReplicationPeerResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">2111</span><span id="line-2111">    } catch (ReplicationException | IOException e) {</span>
+<span class="source-line-no">2112</span><span id="line-2112">      throw new ServiceException(e);</span>
+<span class="source-line-no">2113</span><span id="line-2113">    }</span>
+<span class="source-line-no">2114</span><span id="line-2114">  }</span>
+<span class="source-line-no">2115</span><span id="line-2115"></span>
+<span class="source-line-no">2116</span><span id="line-2116">  @Override</span>
+<span class="source-line-no">2117</span><span id="line-2117">  public EnableReplicationPeerResponse enableReplicationPeer(RpcController controller,</span>
+<span class="source-line-no">2118</span><span id="line-2118">    EnableReplicationPeerRequest request) throws ServiceException {</span>
+<span class="source-line-no">2119</span><span id="line-2119">    try {</span>
+<span class="source-line-no">2120</span><span id="line-2120">      long procId = server.enableReplicationPeer(request.getPeerId());</span>
+<span class="source-line-no">2121</span><span id="line-2121">      return EnableReplicationPeerResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">2122</span><span id="line-2122">    } catch (ReplicationException | IOException e) {</span>
+<span class="source-line-no">2123</span><span id="line-2123">      throw new ServiceException(e);</span>
+<span class="source-line-no">2124</span><span id="line-2124">    }</span>
+<span class="source-line-no">2125</span><span id="line-2125">  }</span>
+<span class="source-line-no">2126</span><span id="line-2126"></span>
+<span class="source-line-no">2127</span><span id="line-2127">  @Override</span>
+<span class="source-line-no">2128</span><span id="line-2128">  public DisableReplicationPeerResponse disableReplicationPeer(RpcController controller,</span>
+<span class="source-line-no">2129</span><span id="line-2129">    DisableReplicationPeerRequest request) throws ServiceException {</span>
+<span class="source-line-no">2130</span><span id="line-2130">    try {</span>
+<span class="source-line-no">2131</span><span id="line-2131">      long procId = server.disableReplicationPeer(request.getPeerId());</span>
+<span class="source-line-no">2132</span><span id="line-2132">      return DisableReplicationPeerResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">2133</span><span id="line-2133">    } catch (ReplicationException | IOException e) {</span>
+<span class="source-line-no">2134</span><span id="line-2134">      throw new ServiceException(e);</span>
+<span class="source-line-no">2135</span><span id="line-2135">    }</span>
+<span class="source-line-no">2136</span><span id="line-2136">  }</span>
+<span class="source-line-no">2137</span><span id="line-2137"></span>
+<span class="source-line-no">2138</span><span id="line-2138">  @Override</span>
+<span class="source-line-no">2139</span><span id="line-2139">  public GetReplicationPeerConfigResponse getReplicationPeerConfig(RpcController controller,</span>
+<span class="source-line-no">2140</span><span id="line-2140">    GetReplicationPeerConfigRequest request) throws ServiceException {</span>
+<span class="source-line-no">2141</span><span id="line-2141">    GetReplicationPeerConfigResponse.Builder response =</span>
+<span class="source-line-no">2142</span><span id="line-2142">      GetReplicationPeerConfigResponse.newBuilder();</span>
+<span class="source-line-no">2143</span><span id="line-2143">    try {</span>
+<span class="source-line-no">2144</span><span id="line-2144">      String peerId = request.getPeerId();</span>
+<span class="source-line-no">2145</span><span id="line-2145">      ReplicationPeerConfig peerConfig = server.getReplicationPeerConfig(peerId);</span>
+<span class="source-line-no">2146</span><span id="line-2146">      response.setPeerId(peerId);</span>
+<span class="source-line-no">2147</span><span id="line-2147">      response.setPeerConfig(ReplicationPeerConfigUtil.convert(peerConfig));</span>
+<span class="source-line-no">2148</span><span id="line-2148">    } catch (ReplicationException | IOException e) {</span>
+<span class="source-line-no">2149</span><span id="line-2149">      throw new ServiceException(e);</span>
+<span class="source-line-no">2150</span><span id="line-2150">    }</span>
+<span class="source-line-no">2151</span><span id="line-2151">    return response.build();</span>
+<span class="source-line-no">2152</span><span id="line-2152">  }</span>
+<span class="source-line-no">2153</span><span id="line-2153"></span>
+<span class="source-line-no">2154</span><span id="line-2154">  @Override</span>
+<span class="source-line-no">2155</span><span id="line-2155">  public UpdateReplicationPeerConfigResponse updateReplicationPeerConfig(RpcController controller,</span>
+<span class="source-line-no">2156</span><span id="line-2156">    UpdateReplicationPeerConfigRequest request) throws ServiceException {</span>
+<span class="source-line-no">2157</span><span id="line-2157">    try {</span>
+<span class="source-line-no">2158</span><span id="line-2158">      long procId = server.updateReplicationPeerConfig(request.getPeerId(),</span>
+<span class="source-line-no">2159</span><span id="line-2159">        ReplicationPeerConfigUtil.convert(request.getPeerConfig()));</span>
+<span class="source-line-no">2160</span><span id="line-2160">      return UpdateReplicationPeerConfigResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">2161</span><span id="line-2161">    } catch (ReplicationException | IOException e) {</span>
+<span class="source-line-no">2162</span><span id="line-2162">      throw new ServiceException(e);</span>
+<span class="source-line-no">2163</span><span id="line-2163">    }</span>
+<span class="source-line-no">2164</span><span id="line-2164">  }</span>
+<span class="source-line-no">2165</span><span id="line-2165"></span>
+<span class="source-line-no">2166</span><span id="line-2166">  @Override</span>
+<span class="source-line-no">2167</span><span id="line-2167">  public TransitReplicationPeerSyncReplicationStateResponse</span>
+<span class="source-line-no">2168</span><span id="line-2168">    transitReplicationPeerSyncReplicationState(RpcController controller,</span>
+<span class="source-line-no">2169</span><span id="line-2169">      TransitReplicationPeerSyncReplicationStateRequest request) throws ServiceException {</span>
+<span class="source-line-no">2170</span><span id="line-2170">    try {</span>
+<span class="source-line-no">2171</span><span id="line-2171">      long procId = server.transitReplicationPeerSyncReplicationState(request.getPeerId(),</span>
+<span class="source-line-no">2172</span><span id="line-2172">        ReplicationPeerConfigUtil.toSyncReplicationState(request.getSyncReplicationState()));</span>
+<span class="source-line-no">2173</span><span id="line-2173">      return TransitReplicationPeerSyncReplicationStateResponse.newBuilder().setProcId(procId)</span>
+<span class="source-line-no">2174</span><span id="line-2174">        .build();</span>
+<span class="source-line-no">2175</span><span id="line-2175">    } catch (ReplicationException | IOException e) {</span>
+<span class="source-line-no">2176</span><span id="line-2176">      throw new ServiceException(e);</span>
+<span class="source-line-no">2177</span><span id="line-2177">    }</span>
+<span class="source-line-no">2178</span><span id="line-2178">  }</span>
+<span class="source-line-no">2179</span><span id="line-2179"></span>
+<span class="source-line-no">2180</span><span id="line-2180">  @Override</span>
+<span class="source-line-no">2181</span><span id="line-2181">  public ListReplicationPeersResponse listReplicationPeers(RpcController controller,</span>
+<span class="source-line-no">2182</span><span id="line-2182">    ListReplicationPeersRequest request) throws ServiceException {</span>
+<span class="source-line-no">2183</span><span id="line-2183">    ListReplicationPeersResponse.Builder response = ListReplicationPeersResponse.newBuilder();</span>
+<span class="source-line-no">2184</span><span id="line-2184">    try {</span>
+<span class="source-line-no">2185</span><span id="line-2185">      List&lt;ReplicationPeerDescription&gt; peers =</span>
+<span class="source-line-no">2186</span><span id="line-2186">        server.listReplicationPeers(request.hasRegex() ? request.getRegex() : null);</span>
+<span class="source-line-no">2187</span><span id="line-2187">      for (ReplicationPeerDescription peer : peers) {</span>
+<span class="source-line-no">2188</span><span id="line-2188">        response.addPeerDesc(ReplicationPeerConfigUtil.toProtoReplicationPeerDescription(peer));</span>
+<span class="source-line-no">2189</span><span id="line-2189">      }</span>
+<span class="source-line-no">2190</span><span id="line-2190">    } catch (ReplicationException | IOException e) {</span>
+<span class="source-line-no">2191</span><span id="line-2191">      throw new ServiceException(e);</span>
+<span class="source-line-no">2192</span><span id="line-2192">    }</span>
+<span class="source-line-no">2193</span><span id="line-2193">    return response.build();</span>
+<span class="source-line-no">2194</span><span id="line-2194">  }</span>
+<span class="source-line-no">2195</span><span id="line-2195"></span>
+<span class="source-line-no">2196</span><span id="line-2196">  @Override</span>
+<span class="source-line-no">2197</span><span id="line-2197">  public GetReplicationPeerStateResponse isReplicationPeerEnabled(RpcController controller,</span>
+<span class="source-line-no">2198</span><span id="line-2198">    GetReplicationPeerStateRequest request) throws ServiceException {</span>
+<span class="source-line-no">2199</span><span id="line-2199">    boolean isEnabled;</span>
+<span class="source-line-no">2200</span><span id="line-2200">    try {</span>
+<span class="source-line-no">2201</span><span id="line-2201">      isEnabled = server.getReplicationPeerManager().getPeerState(request.getPeerId());</span>
+<span class="source-line-no">2202</span><span id="line-2202">    } catch (ReplicationException ioe) {</span>
+<span class="source-line-no">2203</span><span id="line-2203">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2204</span><span id="line-2204">    }</span>
+<span class="source-line-no">2205</span><span id="line-2205">    return GetReplicationPeerStateResponse.newBuilder().setIsEnabled(isEnabled).build();</span>
+<span class="source-line-no">2206</span><span id="line-2206">  }</span>
+<span class="source-line-no">2207</span><span id="line-2207"></span>
+<span class="source-line-no">2208</span><span id="line-2208">  @Override</span>
+<span class="source-line-no">2209</span><span id="line-2209">  public ReplicationPeerModificationSwitchResponse replicationPeerModificationSwitch(</span>
+<span class="source-line-no">2210</span><span id="line-2210">    RpcController controller, ReplicationPeerModificationSwitchRequest request)</span>
+<span class="source-line-no">2211</span><span id="line-2211">    throws ServiceException {</span>
+<span class="source-line-no">2212</span><span id="line-2212">    try {</span>
+<span class="source-line-no">2213</span><span id="line-2213">      server.checkInitialized();</span>
+<span class="source-line-no">2214</span><span id="line-2214">      boolean prevValue = server.replicationPeerModificationSwitch(request.getOn());</span>
+<span class="source-line-no">2215</span><span id="line-2215">      return ReplicationPeerModificationSwitchResponse.newBuilder().setPreviousValue(prevValue)</span>
+<span class="source-line-no">2216</span><span id="line-2216">        .build();</span>
+<span class="source-line-no">2217</span><span id="line-2217">    } catch (IOException ioe) {</span>
+<span class="source-line-no">2218</span><span id="line-2218">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2219</span><span id="line-2219">    }</span>
+<span class="source-line-no">2220</span><span id="line-2220">  }</span>
+<span class="source-line-no">2221</span><span id="line-2221"></span>
+<span class="source-line-no">2222</span><span id="line-2222">  @Override</span>
+<span class="source-line-no">2223</span><span id="line-2223">  public GetReplicationPeerModificationProceduresResponse getReplicationPeerModificationProcedures(</span>
+<span class="source-line-no">2224</span><span id="line-2224">    RpcController controller, GetReplicationPeerModificationProceduresRequest request)</span>
+<span class="source-line-no">2225</span><span id="line-2225">    throws ServiceException {</span>
+<span class="source-line-no">2226</span><span id="line-2226">    try {</span>
+<span class="source-line-no">2227</span><span id="line-2227">      server.checkInitialized();</span>
+<span class="source-line-no">2228</span><span id="line-2228">      GetReplicationPeerModificationProceduresResponse.Builder builder =</span>
+<span class="source-line-no">2229</span><span id="line-2229">        GetReplicationPeerModificationProceduresResponse.newBuilder();</span>
+<span class="source-line-no">2230</span><span id="line-2230">      for (Procedure&lt;?&gt; proc : server.getProcedures()) {</span>
+<span class="source-line-no">2231</span><span id="line-2231">        if (proc.isFinished()) {</span>
+<span class="source-line-no">2232</span><span id="line-2232">          continue;</span>
+<span class="source-line-no">2233</span><span id="line-2233">        }</span>
+<span class="source-line-no">2234</span><span id="line-2234">        if (!(proc instanceof AbstractPeerNoLockProcedure)) {</span>
+<span class="source-line-no">2235</span><span id="line-2235">          continue;</span>
+<span class="source-line-no">2236</span><span id="line-2236">        }</span>
+<span class="source-line-no">2237</span><span id="line-2237">        builder.addProcedure(ProcedureUtil.convertToProtoProcedure(proc));</span>
+<span class="source-line-no">2238</span><span id="line-2238">      }</span>
+<span class="source-line-no">2239</span><span id="line-2239">      return builder.build();</span>
+<span class="source-line-no">2240</span><span id="line-2240">    } catch (IOException ioe) {</span>
+<span class="source-line-no">2241</span><span id="line-2241">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2242</span><span id="line-2242">    }</span>
+<span class="source-line-no">2243</span><span id="line-2243">  }</span>
+<span class="source-line-no">2244</span><span id="line-2244"></span>
+<span class="source-line-no">2245</span><span id="line-2245">  @Override</span>
+<span class="source-line-no">2246</span><span id="line-2246">  public IsReplicationPeerModificationEnabledResponse isReplicationPeerModificationEnabled(</span>
+<span class="source-line-no">2247</span><span id="line-2247">    RpcController controller, IsReplicationPeerModificationEnabledRequest request)</span>
+<span class="source-line-no">2248</span><span id="line-2248">    throws ServiceException {</span>
+<span class="source-line-no">2249</span><span id="line-2249">    try {</span>
+<span class="source-line-no">2250</span><span id="line-2250">      server.checkInitialized();</span>
+<span class="source-line-no">2251</span><span id="line-2251">      return IsReplicationPeerModificationEnabledResponse.newBuilder()</span>
+<span class="source-line-no">2252</span><span id="line-2252">        .setEnabled(server.isReplicationPeerModificationEnabled()).build();</span>
+<span class="source-line-no">2253</span><span id="line-2253">    } catch (IOException ioe) {</span>
+<span class="source-line-no">2254</span><span id="line-2254">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2255</span><span id="line-2255">    }</span>
+<span class="source-line-no">2256</span><span id="line-2256">  }</span>
+<span class="source-line-no">2257</span><span id="line-2257"></span>
+<span class="source-line-no">2258</span><span id="line-2258">  @Override</span>
+<span class="source-line-no">2259</span><span id="line-2259">  public ListDecommissionedRegionServersResponse listDecommissionedRegionServers(</span>
+<span class="source-line-no">2260</span><span id="line-2260">    RpcController controller, ListDecommissionedRegionServersRequest request)</span>
+<span class="source-line-no">2261</span><span id="line-2261">    throws ServiceException {</span>
+<span class="source-line-no">2262</span><span id="line-2262">    ListDecommissionedRegionServersResponse.Builder response =</span>
+<span class="source-line-no">2263</span><span id="line-2263">      ListDecommissionedRegionServersResponse.newBuilder();</span>
+<span class="source-line-no">2264</span><span id="line-2264">    try {</span>
+<span class="source-line-no">2265</span><span id="line-2265">      server.checkInitialized();</span>
+<span class="source-line-no">2266</span><span id="line-2266">      if (server.cpHost != null) {</span>
+<span class="source-line-no">2267</span><span id="line-2267">        server.cpHost.preListDecommissionedRegionServers();</span>
+<span class="source-line-no">2268</span><span id="line-2268">      }</span>
+<span class="source-line-no">2269</span><span id="line-2269">      List&lt;ServerName&gt; servers = server.listDecommissionedRegionServers();</span>
+<span class="source-line-no">2270</span><span id="line-2270">      response.addAllServerName((servers.stream().map(server -&gt; ProtobufUtil.toServerName(server)))</span>
+<span class="source-line-no">2271</span><span id="line-2271">        .collect(Collectors.toList()));</span>
+<span class="source-line-no">2272</span><span id="line-2272">      if (server.cpHost != null) {</span>
+<span class="source-line-no">2273</span><span id="line-2273">        server.cpHost.postListDecommissionedRegionServers();</span>
+<span class="source-line-no">2274</span><span id="line-2274">      }</span>
+<span class="source-line-no">2275</span><span id="line-2275">    } catch (IOException io) {</span>
+<span class="source-line-no">2276</span><span id="line-2276">      throw new ServiceException(io);</span>
+<span class="source-line-no">2277</span><span id="line-2277">    }</span>
+<span class="source-line-no">2278</span><span id="line-2278"></span>
+<span class="source-line-no">2279</span><span id="line-2279">    return response.build();</span>
+<span class="source-line-no">2280</span><span id="line-2280">  }</span>
+<span class="source-line-no">2281</span><span id="line-2281"></span>
+<span class="source-line-no">2282</span><span id="line-2282">  @Override</span>
+<span class="source-line-no">2283</span><span id="line-2283">  public DecommissionRegionServersResponse decommissionRegionServers(RpcController controller,</span>
+<span class="source-line-no">2284</span><span id="line-2284">    DecommissionRegionServersRequest request) throws ServiceException {</span>
+<span class="source-line-no">2285</span><span id="line-2285">    try {</span>
+<span class="source-line-no">2286</span><span id="line-2286">      server.checkInitialized();</span>
+<span class="source-line-no">2287</span><span id="line-2287">      List&lt;ServerName&gt; servers = request.getServerNameList().stream()</span>
+<span class="source-line-no">2288</span><span id="line-2288">        .map(pbServer -&gt; ProtobufUtil.toServerName(pbServer)).collect(Collectors.toList());</span>
+<span class="source-line-no">2289</span><span id="line-2289">      boolean offload = request.getOffload();</span>
+<span class="source-line-no">2290</span><span id="line-2290">      if (server.cpHost != null) {</span>
+<span class="source-line-no">2291</span><span id="line-2291">        server.cpHost.preDecommissionRegionServers(servers, offload);</span>
+<span class="source-line-no">2292</span><span id="line-2292">      }</span>
+<span class="source-line-no">2293</span><span id="line-2293">      server.decommissionRegionServers(servers, offload);</span>
+<span class="source-line-no">2294</span><span id="line-2294">      if (server.cpHost != null) {</span>
+<span class="source-line-no">2295</span><span id="line-2295">        server.cpHost.postDecommissionRegionServers(servers, offload);</span>
+<span class="source-line-no">2296</span><span id="line-2296">      }</span>
+<span class="source-line-no">2297</span><span id="line-2297">    } catch (IOException io) {</span>
+<span class="source-line-no">2298</span><span id="line-2298">      throw new ServiceException(io);</span>
+<span class="source-line-no">2299</span><span id="line-2299">    }</span>
+<span class="source-line-no">2300</span><span id="line-2300"></span>
+<span class="source-line-no">2301</span><span id="line-2301">    return DecommissionRegionServersResponse.newBuilder().build();</span>
+<span class="source-line-no">2302</span><span id="line-2302">  }</span>
+<span class="source-line-no">2303</span><span id="line-2303"></span>
+<span class="source-line-no">2304</span><span id="line-2304">  @Override</span>
+<span class="source-line-no">2305</span><span id="line-2305">  public RecommissionRegionServerResponse recommissionRegionServer(RpcController controller,</span>
+<span class="source-line-no">2306</span><span id="line-2306">    RecommissionRegionServerRequest request) throws ServiceException {</span>
+<span class="source-line-no">2307</span><span id="line-2307">    try {</span>
+<span class="source-line-no">2308</span><span id="line-2308">      server.checkInitialized();</span>
+<span class="source-line-no">2309</span><span id="line-2309">      ServerName sn = ProtobufUtil.toServerName(request.getServerName());</span>
+<span class="source-line-no">2310</span><span id="line-2310">      List&lt;byte[]&gt; encodedRegionNames = request.getRegionList().stream()</span>
+<span class="source-line-no">2311</span><span id="line-2311">        .map(regionSpecifier -&gt; regionSpecifier.getValue().toByteArray())</span>
+<span class="source-line-no">2312</span><span id="line-2312">        .collect(Collectors.toList());</span>
+<span class="source-line-no">2313</span><span id="line-2313">      if (server.cpHost != null) {</span>
+<span class="source-line-no">2314</span><span id="line-2314">        server.cpHost.preRecommissionRegionServer(sn, encodedRegionNames);</span>
+<span class="source-line-no">2315</span><span id="line-2315">      }</span>
+<span class="source-line-no">2316</span><span id="line-2316">      server.recommissionRegionServer(sn, encodedRegionNames);</span>
+<span class="source-line-no">2317</span><span id="line-2317">      if (server.cpHost != null) {</span>
+<span class="source-line-no">2318</span><span id="line-2318">        server.cpHost.postRecommissionRegionServer(sn, encodedRegionNames);</span>
+<span class="source-line-no">2319</span><span id="line-2319">      }</span>
+<span class="source-line-no">2320</span><span id="line-2320">    } catch (IOException io) {</span>
+<span class="source-line-no">2321</span><span id="line-2321">      throw new ServiceException(io);</span>
+<span class="source-line-no">2322</span><span id="line-2322">    }</span>
+<span class="source-line-no">2323</span><span id="line-2323"></span>
+<span class="source-line-no">2324</span><span id="line-2324">    return RecommissionRegionServerResponse.newBuilder().build();</span>
+<span class="source-line-no">2325</span><span id="line-2325">  }</span>
+<span class="source-line-no">2326</span><span id="line-2326"></span>
+<span class="source-line-no">2327</span><span id="line-2327">  @Override</span>
+<span class="source-line-no">2328</span><span id="line-2328">  public LockResponse requestLock(RpcController controller, final LockRequest request)</span>
+<span class="source-line-no">2329</span><span id="line-2329">    throws ServiceException {</span>
+<span class="source-line-no">2330</span><span id="line-2330">    try {</span>
+<span class="source-line-no">2331</span><span id="line-2331">      if (request.getDescription().isEmpty()) {</span>
+<span class="source-line-no">2332</span><span id="line-2332">        throw new IllegalArgumentException("Empty description");</span>
+<span class="source-line-no">2333</span><span id="line-2333">      }</span>
+<span class="source-line-no">2334</span><span id="line-2334">      NonceProcedureRunnable npr;</span>
+<span class="source-line-no">2335</span><span id="line-2335">      LockType type = LockType.valueOf(request.getLockType().name());</span>
+<span class="source-line-no">2336</span><span id="line-2336">      if (request.getRegionInfoCount() &gt; 0) {</span>
+<span class="source-line-no">2337</span><span id="line-2337">        final RegionInfo[] regionInfos = new RegionInfo[request.getRegionInfoCount()];</span>
+<span class="source-line-no">2338</span><span id="line-2338">        for (int i = 0; i &lt; request.getRegionInfoCount(); ++i) {</span>
+<span class="source-line-no">2339</span><span id="line-2339">          regionInfos[i] = ProtobufUtil.toRegionInfo(request.getRegionInfo(i));</span>
+<span class="source-line-no">2340</span><span id="line-2340">        }</span>
+<span class="source-line-no">2341</span><span id="line-2341">        npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span>
+<span class="source-line-no">2342</span><span id="line-2342">          @Override</span>
+<span class="source-line-no">2343</span><span id="line-2343">          protected void run() throws IOException {</span>
+<span class="source-line-no">2344</span><span id="line-2344">            setProcId(server.getLockManager().remoteLocks().requestRegionsLock(regionInfos,</span>
+<span class="source-line-no">2345</span><span id="line-2345">              request.getDescription(), getNonceKey()));</span>
+<span class="source-line-no">2346</span><span id="line-2346">          }</span>
+<span class="source-line-no">2347</span><span id="line-2347"></span>
+<span class="source-line-no">2348</span><span id="line-2348">          @Override</span>
+<span class="source-line-no">2349</span><span id="line-2349">          protected String getDescription() {</span>
+<span class="source-line-no">2350</span><span id="line-2350">            return "RequestLock";</span>
+<span class="source-line-no">2351</span><span id="line-2351">          }</span>
+<span class="source-line-no">2352</span><span id="line-2352">        };</span>
+<span class="source-line-no">2353</span><span id="line-2353">      } else if (request.hasTableName()) {</span>
+<span class="source-line-no">2354</span><span id="line-2354">        final TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span>
+<span class="source-line-no">2355</span><span id="line-2355">        npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span>
+<span class="source-line-no">2356</span><span id="line-2356">          @Override</span>
+<span class="source-line-no">2357</span><span id="line-2357">          protected void run() throws IOException {</span>
+<span class="source-line-no">2358</span><span id="line-2358">            setProcId(server.getLockManager().remoteLocks().requestTableLock(tableName, type,</span>
+<span class="source-line-no">2359</span><span id="line-2359">              request.getDescription(), getNonceKey()));</span>
+<span class="source-line-no">2360</span><span id="line-2360">          }</span>
+<span class="source-line-no">2361</span><span id="line-2361"></span>
+<span class="source-line-no">2362</span><span id="line-2362">          @Override</span>
+<span class="source-line-no">2363</span><span id="line-2363">          protected String getDescription() {</span>
+<span class="source-line-no">2364</span><span id="line-2364">            return "RequestLock";</span>
+<span class="source-line-no">2365</span><span id="line-2365">          }</span>
+<span class="source-line-no">2366</span><span id="line-2366">        };</span>
+<span class="source-line-no">2367</span><span id="line-2367">      } else if (request.hasNamespace()) {</span>
+<span class="source-line-no">2368</span><span id="line-2368">        npr = new NonceProcedureRunnable(server, request.getNonceGroup(), request.getNonce()) {</span>
+<span class="source-line-no">2369</span><span id="line-2369">          @Override</span>
+<span class="source-line-no">2370</span><span id="line-2370">          protected void run() throws IOException {</span>
+<span class="source-line-no">2371</span><span id="line-2371">            setProcId(server.getLockManager().remoteLocks().requestNamespaceLock(</span>
+<span class="source-line-no">2372</span><span id="line-2372">              request.getNamespace(), type, request.getDescription(), getNonceKey()));</span>
+<span class="source-line-no">2373</span><span id="line-2373">          }</span>
+<span class="source-line-no">2374</span><span id="line-2374"></span>
+<span class="source-line-no">2375</span><span id="line-2375">          @Override</span>
+<span class="source-line-no">2376</span><span id="line-2376">          protected String getDescription() {</span>
+<span class="source-line-no">2377</span><span id="line-2377">            return "RequestLock";</span>
+<span class="source-line-no">2378</span><span id="line-2378">          }</span>
+<span class="source-line-no">2379</span><span id="line-2379">        };</span>
+<span class="source-line-no">2380</span><span id="line-2380">      } else {</span>
+<span class="source-line-no">2381</span><span id="line-2381">        throw new IllegalArgumentException("one of table/namespace/region should be specified");</span>
+<span class="source-line-no">2382</span><span id="line-2382">      }</span>
+<span class="source-line-no">2383</span><span id="line-2383">      long procId = MasterProcedureUtil.submitProcedure(npr);</span>
+<span class="source-line-no">2384</span><span id="line-2384">      return LockResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">2385</span><span id="line-2385">    } catch (IllegalArgumentException e) {</span>
+<span class="source-line-no">2386</span><span id="line-2386">      LOG.warn("Exception when queuing lock", e);</span>
+<span class="source-line-no">2387</span><span id="line-2387">      throw new ServiceException(new DoNotRetryIOException(e));</span>
+<span class="source-line-no">2388</span><span id="line-2388">    } catch (IOException e) {</span>
+<span class="source-line-no">2389</span><span id="line-2389">      LOG.warn("Exception when queuing lock", e);</span>
+<span class="source-line-no">2390</span><span id="line-2390">      throw new ServiceException(e);</span>
+<span class="source-line-no">2391</span><span id="line-2391">    }</span>
+<span class="source-line-no">2392</span><span id="line-2392">  }</span>
+<span class="source-line-no">2393</span><span id="line-2393"></span>
+<span class="source-line-no">2394</span><span id="line-2394">  /**</span>
+<span class="source-line-no">2395</span><span id="line-2395">   * @return LOCKED, if procedure is found and it has the lock; else UNLOCKED.</span>
+<span class="source-line-no">2396</span><span id="line-2396">   * @throws ServiceException if given proc id is found but it is not a LockProcedure.</span>
+<span class="source-line-no">2397</span><span id="line-2397">   */</span>
+<span class="source-line-no">2398</span><span id="line-2398">  @Override</span>
+<span class="source-line-no">2399</span><span id="line-2399">  public LockHeartbeatResponse lockHeartbeat(RpcController controller, LockHeartbeatRequest request)</span>
+<span class="source-line-no">2400</span><span id="line-2400">    throws ServiceException {</span>
+<span class="source-line-no">2401</span><span id="line-2401">    try {</span>
+<span class="source-line-no">2402</span><span id="line-2402">      if (</span>
+<span class="source-line-no">2403</span><span id="line-2403">        server.getLockManager().remoteLocks().lockHeartbeat(request.getProcId(),</span>
+<span class="source-line-no">2404</span><span id="line-2404">          request.getKeepAlive())</span>
+<span class="source-line-no">2405</span><span id="line-2405">      ) {</span>
+<span class="source-line-no">2406</span><span id="line-2406">        return LockHeartbeatResponse.newBuilder()</span>
+<span class="source-line-no">2407</span><span id="line-2407">          .setTimeoutMs(server.getConfiguration().getInt(LockProcedure.REMOTE_LOCKS_TIMEOUT_MS_CONF,</span>
+<span class="source-line-no">2408</span><span id="line-2408">            LockProcedure.DEFAULT_REMOTE_LOCKS_TIMEOUT_MS))</span>
+<span class="source-line-no">2409</span><span id="line-2409">          .setLockStatus(LockHeartbeatResponse.LockStatus.LOCKED).build();</span>
+<span class="source-line-no">2410</span><span id="line-2410">      } else {</span>
+<span class="source-line-no">2411</span><span id="line-2411">        return LockHeartbeatResponse.newBuilder()</span>
+<span class="source-line-no">2412</span><span id="line-2412">          .setLockStatus(LockHeartbeatResponse.LockStatus.UNLOCKED).build();</span>
+<span class="source-line-no">2413</span><span id="line-2413">      }</span>
+<span class="source-line-no">2414</span><span id="line-2414">    } catch (IOException e) {</span>
+<span class="source-line-no">2415</span><span id="line-2415">      throw new ServiceException(e);</span>
+<span class="source-line-no">2416</span><span id="line-2416">    }</span>
+<span class="source-line-no">2417</span><span id="line-2417">  }</span>
+<span class="source-line-no">2418</span><span id="line-2418"></span>
+<span class="source-line-no">2419</span><span id="line-2419">  @Override</span>
+<span class="source-line-no">2420</span><span id="line-2420">  public RegionSpaceUseReportResponse reportRegionSpaceUse(RpcController controller,</span>
+<span class="source-line-no">2421</span><span id="line-2421">    RegionSpaceUseReportRequest request) throws ServiceException {</span>
+<span class="source-line-no">2422</span><span id="line-2422">    try {</span>
+<span class="source-line-no">2423</span><span id="line-2423">      server.checkInitialized();</span>
+<span class="source-line-no">2424</span><span id="line-2424">      if (!QuotaUtil.isQuotaEnabled(server.getConfiguration())) {</span>
+<span class="source-line-no">2425</span><span id="line-2425">        return RegionSpaceUseReportResponse.newBuilder().build();</span>
+<span class="source-line-no">2426</span><span id="line-2426">      }</span>
+<span class="source-line-no">2427</span><span id="line-2427">      MasterQuotaManager quotaManager = this.server.getMasterQuotaManager();</span>
+<span class="source-line-no">2428</span><span id="line-2428">      if (quotaManager != null) {</span>
+<span class="source-line-no">2429</span><span id="line-2429">        final long now = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">2430</span><span id="line-2430">        for (RegionSpaceUse report : request.getSpaceUseList()) {</span>
+<span class="source-line-no">2431</span><span id="line-2431">          quotaManager.addRegionSize(ProtobufUtil.toRegionInfo(report.getRegionInfo()),</span>
+<span class="source-line-no">2432</span><span id="line-2432">            report.getRegionSize(), now);</span>
+<span class="source-line-no">2433</span><span id="line-2433">        }</span>
+<span class="source-line-no">2434</span><span id="line-2434">      } else {</span>
+<span class="source-line-no">2435</span><span id="line-2435">        LOG.debug("Received region space usage report but HMaster is not ready to process it, "</span>
+<span class="source-line-no">2436</span><span id="line-2436">          + "skipping");</span>
+<span class="source-line-no">2437</span><span id="line-2437">      }</span>
+<span class="source-line-no">2438</span><span id="line-2438">      return RegionSpaceUseReportResponse.newBuilder().build();</span>
+<span class="source-line-no">2439</span><span id="line-2439">    } catch (Exception e) {</span>
+<span class="source-line-no">2440</span><span id="line-2440">      throw new ServiceException(e);</span>
+<span class="source-line-no">2441</span><span id="line-2441">    }</span>
+<span class="source-line-no">2442</span><span id="line-2442">  }</span>
+<span class="source-line-no">2443</span><span id="line-2443"></span>
+<span class="source-line-no">2444</span><span id="line-2444">  @Override</span>
+<span class="source-line-no">2445</span><span id="line-2445">  public GetSpaceQuotaRegionSizesResponse getSpaceQuotaRegionSizes(RpcController controller,</span>
+<span class="source-line-no">2446</span><span id="line-2446">    GetSpaceQuotaRegionSizesRequest request) throws ServiceException {</span>
+<span class="source-line-no">2447</span><span id="line-2447">    try {</span>
+<span class="source-line-no">2448</span><span id="line-2448">      server.checkInitialized();</span>
+<span class="source-line-no">2449</span><span id="line-2449">      MasterQuotaManager quotaManager = this.server.getMasterQuotaManager();</span>
+<span class="source-line-no">2450</span><span id="line-2450">      GetSpaceQuotaRegionSizesResponse.Builder builder =</span>
+<span class="source-line-no">2451</span><span id="line-2451">        GetSpaceQuotaRegionSizesResponse.newBuilder();</span>
+<span class="source-line-no">2452</span><span id="line-2452">      if (quotaManager != null) {</span>
+<span class="source-line-no">2453</span><span id="line-2453">        Map&lt;RegionInfo, Long&gt; regionSizes = quotaManager.snapshotRegionSizes();</span>
+<span class="source-line-no">2454</span><span id="line-2454">        Map&lt;TableName, Long&gt; regionSizesByTable = new HashMap&lt;&gt;();</span>
+<span class="source-line-no">2455</span><span id="line-2455">        // Translate hregioninfo+long -&gt; tablename+long</span>
+<span class="source-line-no">2456</span><span id="line-2456">        for (Entry&lt;RegionInfo, Long&gt; entry : regionSizes.entrySet()) {</span>
+<span class="source-line-no">2457</span><span id="line-2457">          final TableName tableName = entry.getKey().getTable();</span>
+<span class="source-line-no">2458</span><span id="line-2458">          Long prevSize = regionSizesByTable.get(tableName);</span>
+<span class="source-line-no">2459</span><span id="line-2459">          if (prevSize == null) {</span>
+<span class="source-line-no">2460</span><span id="line-2460">            prevSize = 0L;</span>
+<span class="source-line-no">2461</span><span id="line-2461">          }</span>
+<span class="source-line-no">2462</span><span id="line-2462">          regionSizesByTable.put(tableName, prevSize + entry.getValue());</span>
+<span class="source-line-no">2463</span><span id="line-2463">        }</span>
+<span class="source-line-no">2464</span><span id="line-2464">        // Serialize them into the protobuf</span>
+<span class="source-line-no">2465</span><span id="line-2465">        for (Entry&lt;TableName, Long&gt; tableSize : regionSizesByTable.entrySet()) {</span>
+<span class="source-line-no">2466</span><span id="line-2466">          builder.addSizes(</span>
+<span class="source-line-no">2467</span><span id="line-2467">            RegionSizes.newBuilder().setTableName(ProtobufUtil.toProtoTableName(tableSize.getKey()))</span>
+<span class="source-line-no">2468</span><span id="line-2468">              .setSize(tableSize.getValue()).build());</span>
+<span class="source-line-no">2469</span><span id="line-2469">        }</span>
+<span class="source-line-no">2470</span><span id="line-2470">        return builder.build();</span>
+<span class="source-line-no">2471</span><span id="line-2471">      } else {</span>
+<span class="source-line-no">2472</span><span id="line-2472">        LOG.debug("Received space quota region size report but HMaster is not ready to process it,"</span>
+<span class="source-line-no">2473</span><span id="line-2473">          + "skipping");</span>
+<span class="source-line-no">2474</span><span id="line-2474">      }</span>
+<span class="source-line-no">2475</span><span id="line-2475">      return builder.build();</span>
+<span class="source-line-no">2476</span><span id="line-2476">    } catch (Exception e) {</span>
+<span class="source-line-no">2477</span><span id="line-2477">      throw new ServiceException(e);</span>
+<span class="source-line-no">2478</span><span id="line-2478">    }</span>
+<span class="source-line-no">2479</span><span id="line-2479">  }</span>
+<span class="source-line-no">2480</span><span id="line-2480"></span>
+<span class="source-line-no">2481</span><span id="line-2481">  @Override</span>
+<span class="source-line-no">2482</span><span id="line-2482">  public GetQuotaStatesResponse getQuotaStates(RpcController controller,</span>
+<span class="source-line-no">2483</span><span id="line-2483">    GetQuotaStatesRequest request) throws ServiceException {</span>
+<span class="source-line-no">2484</span><span id="line-2484">    try {</span>
+<span class="source-line-no">2485</span><span id="line-2485">      server.checkInitialized();</span>
+<span class="source-line-no">2486</span><span id="line-2486">      QuotaObserverChore quotaChore = this.server.getQuotaObserverChore();</span>
+<span class="source-line-no">2487</span><span id="line-2487">      GetQuotaStatesResponse.Builder builder = GetQuotaStatesResponse.newBuilder();</span>
+<span class="source-line-no">2488</span><span id="line-2488">      if (quotaChore != null) {</span>
+<span class="source-line-no">2489</span><span id="line-2489">        // The "current" view of all tables with quotas</span>
+<span class="source-line-no">2490</span><span id="line-2490">        Map&lt;TableName, SpaceQuotaSnapshot&gt; tableSnapshots = quotaChore.getTableQuotaSnapshots();</span>
+<span class="source-line-no">2491</span><span id="line-2491">        for (Entry&lt;TableName, SpaceQuotaSnapshot&gt; entry : tableSnapshots.entrySet()) {</span>
+<span class="source-line-no">2492</span><span id="line-2492">          builder.addTableSnapshots(TableQuotaSnapshot.newBuilder()</span>
+<span class="source-line-no">2493</span><span id="line-2493">            .setTableName(ProtobufUtil.toProtoTableName(entry.getKey()))</span>
+<span class="source-line-no">2494</span><span id="line-2494">            .setSnapshot(SpaceQuotaSnapshot.toProtoSnapshot(entry.getValue())).build());</span>
+<span class="source-line-no">2495</span><span id="line-2495">        }</span>
+<span class="source-line-no">2496</span><span id="line-2496">        // The "current" view of all namespaces with quotas</span>
+<span class="source-line-no">2497</span><span id="line-2497">        Map&lt;String, SpaceQuotaSnapshot&gt; nsSnapshots = quotaChore.getNamespaceQuotaSnapshots();</span>
+<span class="source-line-no">2498</span><span id="line-2498">        for (Entry&lt;String, SpaceQuotaSnapshot&gt; entry : nsSnapshots.entrySet()) {</span>
+<span class="source-line-no">2499</span><span id="line-2499">          builder.addNsSnapshots(NamespaceQuotaSnapshot.newBuilder().setNamespace(entry.getKey())</span>
+<span class="source-line-no">2500</span><span id="line-2500">            .setSnapshot(SpaceQuotaSnapshot.toProtoSnapshot(entry.getValue())).build());</span>
+<span class="source-line-no">2501</span><span id="line-2501">        }</span>
+<span class="source-line-no">2502</span><span id="line-2502">        return builder.build();</span>
+<span class="source-line-no">2503</span><span id="line-2503">      }</span>
+<span class="source-line-no">2504</span><span id="line-2504">      return builder.build();</span>
+<span class="source-line-no">2505</span><span id="line-2505">    } catch (Exception e) {</span>
+<span class="source-line-no">2506</span><span id="line-2506">      throw new ServiceException(e);</span>
+<span class="source-line-no">2507</span><span id="line-2507">    }</span>
+<span class="source-line-no">2508</span><span id="line-2508">  }</span>
+<span class="source-line-no">2509</span><span id="line-2509"></span>
+<span class="source-line-no">2510</span><span id="line-2510">  @Override</span>
+<span class="source-line-no">2511</span><span id="line-2511">  public ClearDeadServersResponse clearDeadServers(RpcController controller,</span>
+<span class="source-line-no">2512</span><span id="line-2512">    ClearDeadServersRequest request) throws ServiceException {</span>
+<span class="source-line-no">2513</span><span id="line-2513">    LOG.debug(server.getClientIdAuditPrefix() + " clear dead region servers.");</span>
+<span class="source-line-no">2514</span><span id="line-2514">    ClearDeadServersResponse.Builder response = ClearDeadServersResponse.newBuilder();</span>
+<span class="source-line-no">2515</span><span id="line-2515">    try {</span>
+<span class="source-line-no">2516</span><span id="line-2516">      server.checkInitialized();</span>
+<span class="source-line-no">2517</span><span id="line-2517">      if (server.cpHost != null) {</span>
+<span class="source-line-no">2518</span><span id="line-2518">        server.cpHost.preClearDeadServers();</span>
+<span class="source-line-no">2519</span><span id="line-2519">      }</span>
+<span class="source-line-no">2520</span><span id="line-2520"></span>
+<span class="source-line-no">2521</span><span id="line-2521">      if (server.getServerManager().areDeadServersInProgress()) {</span>
+<span class="source-line-no">2522</span><span id="line-2522">        LOG.debug("Some dead server is still under processing, won't clear the dead server list");</span>
+<span class="source-line-no">2523</span><span id="line-2523">        response.addAllServerName(request.getServerNameList());</span>
+<span class="source-line-no">2524</span><span id="line-2524">      } else {</span>
+<span class="source-line-no">2525</span><span id="line-2525">        DeadServer deadServer = server.getServerManager().getDeadServers();</span>
+<span class="source-line-no">2526</span><span id="line-2526">        Set&lt;Address&gt; clearedServers = new HashSet&lt;&gt;();</span>
+<span class="source-line-no">2527</span><span id="line-2527">        for (HBaseProtos.ServerName pbServer : request.getServerNameList()) {</span>
+<span class="source-line-no">2528</span><span id="line-2528">          ServerName serverName = ProtobufUtil.toServerName(pbServer);</span>
+<span class="source-line-no">2529</span><span id="line-2529">          final boolean deadInProcess =</span>
+<span class="source-line-no">2530</span><span id="line-2530">            server.getProcedures().stream().anyMatch(p -&gt; (p instanceof ServerCrashProcedure)</span>
+<span class="source-line-no">2531</span><span id="line-2531">              &amp;&amp; ((ServerCrashProcedure) p).getServerName().equals(serverName));</span>
+<span class="source-line-no">2532</span><span id="line-2532">          if (deadInProcess) {</span>
+<span class="source-line-no">2533</span><span id="line-2533">            throw new ServiceException(</span>
+<span class="source-line-no">2534</span><span id="line-2534">              String.format("Dead server '%s' is not 'dead' in fact...", serverName));</span>
+<span class="source-line-no">2535</span><span id="line-2535">          }</span>
+<span class="source-line-no">2536</span><span id="line-2536"></span>
+<span class="source-line-no">2537</span><span id="line-2537">          if (!deadServer.removeDeadServer(serverName)) {</span>
+<span class="source-line-no">2538</span><span id="line-2538">            response.addServerName(pbServer);</span>
+<span class="source-line-no">2539</span><span id="line-2539">          } else {</span>
+<span class="source-line-no">2540</span><span id="line-2540">            clearedServers.add(serverName.getAddress());</span>
+<span class="source-line-no">2541</span><span id="line-2541">          }</span>
+<span class="source-line-no">2542</span><span id="line-2542">        }</span>
+<span class="source-line-no">2543</span><span id="line-2543">        server.getRSGroupInfoManager().removeServers(clearedServers);</span>
+<span class="source-line-no">2544</span><span id="line-2544">        LOG.info("Remove decommissioned servers {} from RSGroup done", clearedServers);</span>
+<span class="source-line-no">2545</span><span id="line-2545">      }</span>
+<span class="source-line-no">2546</span><span id="line-2546"></span>
+<span class="source-line-no">2547</span><span id="line-2547">      if (server.cpHost != null) {</span>
+<span class="source-line-no">2548</span><span id="line-2548">        server.cpHost.postClearDeadServers(</span>
+<span class="source-line-no">2549</span><span id="line-2549">          ProtobufUtil.toServerNameList(request.getServerNameList()),</span>
+<span class="source-line-no">2550</span><span id="line-2550">          ProtobufUtil.toServerNameList(response.getServerNameList()));</span>
+<span class="source-line-no">2551</span><span id="line-2551">      }</span>
+<span class="source-line-no">2552</span><span id="line-2552">    } catch (IOException io) {</span>
+<span class="source-line-no">2553</span><span id="line-2553">      throw new ServiceException(io);</span>
+<span class="source-line-no">2554</span><span id="line-2554">    }</span>
+<span class="source-line-no">2555</span><span id="line-2555">    return response.build();</span>
+<span class="source-line-no">2556</span><span id="line-2556">  }</span>
+<span class="source-line-no">2557</span><span id="line-2557"></span>
+<span class="source-line-no">2558</span><span id="line-2558">  @Override</span>
+<span class="source-line-no">2559</span><span id="line-2559">  public ReportProcedureDoneResponse reportProcedureDone(RpcController controller,</span>
+<span class="source-line-no">2560</span><span id="line-2560">    ReportProcedureDoneRequest request) throws ServiceException {</span>
+<span class="source-line-no">2561</span><span id="line-2561">    // Check Masters is up and ready for duty before progressing. Remote side will keep trying.</span>
+<span class="source-line-no">2562</span><span id="line-2562">    try {</span>
+<span class="source-line-no">2563</span><span id="line-2563">      this.server.checkServiceStarted();</span>
+<span class="source-line-no">2564</span><span id="line-2564">      for (RemoteProcedureResult result : request.getResultList()) {</span>
+<span class="source-line-no">2565</span><span id="line-2565">        // -1 is less than any possible MasterActiveCode</span>
+<span class="source-line-no">2566</span><span id="line-2566">        long initiatingMasterActiveTime =</span>
+<span class="source-line-no">2567</span><span id="line-2567">          result.hasInitiatingMasterActiveTime() ? result.getInitiatingMasterActiveTime() : -1;</span>
+<span class="source-line-no">2568</span><span id="line-2568">        throwOnOldMaster(result.getProcId(), initiatingMasterActiveTime);</span>
+<span class="source-line-no">2569</span><span id="line-2569">      }</span>
+<span class="source-line-no">2570</span><span id="line-2570">    } catch (IOException ioe) {</span>
+<span class="source-line-no">2571</span><span id="line-2571">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2572</span><span id="line-2572">    }</span>
+<span class="source-line-no">2573</span><span id="line-2573">    request.getResultList().forEach(result -&gt; {</span>
+<span class="source-line-no">2574</span><span id="line-2574">      if (result.getStatus() == RemoteProcedureResult.Status.SUCCESS) {</span>
+<span class="source-line-no">2575</span><span id="line-2575">        server.remoteProcedureCompleted(result.getProcId());</span>
+<span class="source-line-no">2576</span><span id="line-2576">      } else {</span>
+<span class="source-line-no">2577</span><span id="line-2577">        server.remoteProcedureFailed(result.getProcId(),</span>
+<span class="source-line-no">2578</span><span id="line-2578">          RemoteProcedureException.fromProto(result.getError()));</span>
+<span class="source-line-no">2579</span><span id="line-2579">      }</span>
+<span class="source-line-no">2580</span><span id="line-2580">    });</span>
+<span class="source-line-no">2581</span><span id="line-2581">    return ReportProcedureDoneResponse.getDefaultInstance();</span>
+<span class="source-line-no">2582</span><span id="line-2582">  }</span>
+<span class="source-line-no">2583</span><span id="line-2583"></span>
+<span class="source-line-no">2584</span><span id="line-2584">  private void throwOnOldMaster(long procId, long initiatingMasterActiveTime)</span>
+<span class="source-line-no">2585</span><span id="line-2585">    throws MasterNotRunningException {</span>
+<span class="source-line-no">2586</span><span id="line-2586">    if (initiatingMasterActiveTime &gt; server.getMasterActiveTime()) {</span>
+<span class="source-line-no">2587</span><span id="line-2587">      // procedure is initiated by new active master but report received on master with older active</span>
+<span class="source-line-no">2588</span><span id="line-2588">      // time</span>
+<span class="source-line-no">2589</span><span id="line-2589">      LOG.warn(</span>
+<span class="source-line-no">2590</span><span id="line-2590">        "Report for procId: {} and initiatingMasterAT {} received on master with activeTime {}",</span>
+<span class="source-line-no">2591</span><span id="line-2591">        procId, initiatingMasterActiveTime, server.getMasterActiveTime());</span>
+<span class="source-line-no">2592</span><span id="line-2592">      throw new MasterNotRunningException("Another master is active");</span>
+<span class="source-line-no">2593</span><span id="line-2593">    }</span>
+<span class="source-line-no">2594</span><span id="line-2594">  }</span>
+<span class="source-line-no">2595</span><span id="line-2595"></span>
+<span class="source-line-no">2596</span><span id="line-2596">  @Override</span>
+<span class="source-line-no">2597</span><span id="line-2597">  public FileArchiveNotificationResponse reportFileArchival(RpcController controller,</span>
+<span class="source-line-no">2598</span><span id="line-2598">    FileArchiveNotificationRequest request) throws ServiceException {</span>
+<span class="source-line-no">2599</span><span id="line-2599">    try {</span>
+<span class="source-line-no">2600</span><span id="line-2600">      server.checkInitialized();</span>
+<span class="source-line-no">2601</span><span id="line-2601">      if (!QuotaUtil.isQuotaEnabled(server.getConfiguration())) {</span>
+<span class="source-line-no">2602</span><span id="line-2602">        return FileArchiveNotificationResponse.newBuilder().build();</span>
+<span class="source-line-no">2603</span><span id="line-2603">      }</span>
+<span class="source-line-no">2604</span><span id="line-2604">      server.getMasterQuotaManager().processFileArchivals(request, server.getConnection(),</span>
+<span class="source-line-no">2605</span><span id="line-2605">        server.getConfiguration(), server.getFileSystem());</span>
+<span class="source-line-no">2606</span><span id="line-2606">      return FileArchiveNotificationResponse.newBuilder().build();</span>
+<span class="source-line-no">2607</span><span id="line-2607">    } catch (Exception e) {</span>
+<span class="source-line-no">2608</span><span id="line-2608">      throw new ServiceException(e);</span>
+<span class="source-line-no">2609</span><span id="line-2609">    }</span>
+<span class="source-line-no">2610</span><span id="line-2610">  }</span>
+<span class="source-line-no">2611</span><span id="line-2611"></span>
+<span class="source-line-no">2612</span><span id="line-2612">  // HBCK Services</span>
 <span class="source-line-no">2613</span><span id="line-2613"></span>
-<span class="source-line-no">2614</span><span id="line-2614">  // HBCK Services</span>
-<span class="source-line-no">2615</span><span id="line-2615"></span>
-<span class="source-line-no">2616</span><span id="line-2616">  @Override</span>
-<span class="source-line-no">2617</span><span id="line-2617">  public RunHbckChoreResponse runHbckChore(RpcController c, RunHbckChoreRequest req)</span>
-<span class="source-line-no">2618</span><span id="line-2618">    throws ServiceException {</span>
-<span class="source-line-no">2619</span><span id="line-2619">    rpcPreCheck("runHbckChore");</span>
-<span class="source-line-no">2620</span><span id="line-2620">    LOG.info("{} request HBCK chore to run", server.getClientIdAuditPrefix());</span>
-<span class="source-line-no">2621</span><span id="line-2621">    HbckChore hbckChore = server.getHbckChore();</span>
-<span class="source-line-no">2622</span><span id="line-2622">    boolean ran = hbckChore.runChore();</span>
-<span class="source-line-no">2623</span><span id="line-2623">    return RunHbckChoreResponse.newBuilder().setRan(ran).build();</span>
-<span class="source-line-no">2624</span><span id="line-2624">  }</span>
-<span class="source-line-no">2625</span><span id="line-2625"></span>
-<span class="source-line-no">2626</span><span id="line-2626">  /**</span>
-<span class="source-line-no">2627</span><span id="line-2627">   * Update state of the table in meta only. This is required by hbck in some situations to cleanup</span>
-<span class="source-line-no">2628</span><span id="line-2628">   * stuck assign/ unassign regions procedures for the table.</span>
-<span class="source-line-no">2629</span><span id="line-2629">   * @return previous state of the table</span>
-<span class="source-line-no">2630</span><span id="line-2630">   */</span>
-<span class="source-line-no">2631</span><span id="line-2631">  @Override</span>
-<span class="source-line-no">2632</span><span id="line-2632">  public GetTableStateResponse setTableStateInMeta(RpcController controller,</span>
-<span class="source-line-no">2633</span><span id="line-2633">    SetTableStateInMetaRequest request) throws ServiceException {</span>
-<span class="source-line-no">2634</span><span id="line-2634">    rpcPreCheck("setTableStateInMeta");</span>
-<span class="source-line-no">2635</span><span id="line-2635">    TableName tn = ProtobufUtil.toTableName(request.getTableName());</span>
-<span class="source-line-no">2636</span><span id="line-2636">    try {</span>
-<span class="source-line-no">2637</span><span id="line-2637">      TableState prevState = this.server.getTableStateManager().getTableState(tn);</span>
-<span class="source-line-no">2638</span><span id="line-2638">      TableState newState = TableState.convert(tn, request.getTableState());</span>
-<span class="source-line-no">2639</span><span id="line-2639">      LOG.info("{} set table={} state from {} to {}", server.getClientIdAuditPrefix(), tn,</span>
-<span class="source-line-no">2640</span><span id="line-2640">        prevState.getState(), newState.getState());</span>
-<span class="source-line-no">2641</span><span id="line-2641">      this.server.getTableStateManager().setTableState(tn, newState.getState());</span>
-<span class="source-line-no">2642</span><span id="line-2642">      return GetTableStateResponse.newBuilder().setTableState(prevState.convert()).build();</span>
-<span class="source-line-no">2643</span><span id="line-2643">    } catch (Exception e) {</span>
-<span class="source-line-no">2644</span><span id="line-2644">      throw new ServiceException(e);</span>
-<span class="source-line-no">2645</span><span id="line-2645">    }</span>
-<span class="source-line-no">2646</span><span id="line-2646">  }</span>
-<span class="source-line-no">2647</span><span id="line-2647"></span>
-<span class="source-line-no">2648</span><span id="line-2648">  /**</span>
-<span class="source-line-no">2649</span><span id="line-2649">   * Update state of the region in meta only. This is required by hbck in some situations to cleanup</span>
-<span class="source-line-no">2650</span><span id="line-2650">   * stuck assign/ unassign regions procedures for the table.</span>
-<span class="source-line-no">2651</span><span id="line-2651">   * @return previous states of the regions</span>
-<span class="source-line-no">2652</span><span id="line-2652">   */</span>
-<span class="source-line-no">2653</span><span id="line-2653">  @Override</span>
-<span class="source-line-no">2654</span><span id="line-2654">  public SetRegionStateInMetaResponse setRegionStateInMeta(RpcController controller,</span>
-<span class="source-line-no">2655</span><span id="line-2655">    SetRegionStateInMetaRequest request) throws ServiceException {</span>
-<span class="source-line-no">2656</span><span id="line-2656">    rpcPreCheck("setRegionStateInMeta");</span>
-<span class="source-line-no">2657</span><span id="line-2657">    SetRegionStateInMetaResponse.Builder builder = SetRegionStateInMetaResponse.newBuilder();</span>
-<span class="source-line-no">2658</span><span id="line-2658">    final AssignmentManager am = server.getAssignmentManager();</span>
-<span class="source-line-no">2659</span><span id="line-2659">    try {</span>
-<span class="source-line-no">2660</span><span id="line-2660">      for (RegionSpecifierAndState s : request.getStatesList()) {</span>
-<span class="source-line-no">2661</span><span id="line-2661">        final RegionSpecifier spec = s.getRegionSpecifier();</span>
-<span class="source-line-no">2662</span><span id="line-2662">        final RegionInfo targetRegionInfo = getRegionInfo(spec);</span>
-<span class="source-line-no">2663</span><span id="line-2663">        final RegionState.State targetState = RegionState.State.convert(s.getState());</span>
-<span class="source-line-no">2664</span><span id="line-2664">        final RegionState.State currentState = Optional.ofNullable(targetRegionInfo)</span>
-<span class="source-line-no">2665</span><span id="line-2665">          .map(info -&gt; am.getRegionStates().getRegionState(info)).map(RegionState::getState)</span>
-<span class="source-line-no">2666</span><span id="line-2666">          .orElseThrow(</span>
-<span class="source-line-no">2667</span><span id="line-2667">            () -&gt; new ServiceException("No existing state known for region '" + spec + "'."));</span>
-<span class="source-line-no">2668</span><span id="line-2668">        LOG.info("{} set region={} state from {} to {}", server.getClientIdAuditPrefix(),</span>
-<span class="source-line-no">2669</span><span id="line-2669">          targetRegionInfo, currentState, targetState);</span>
-<span class="source-line-no">2670</span><span id="line-2670">        if (currentState == targetState) {</span>
-<span class="source-line-no">2671</span><span id="line-2671">          LOG.debug("Proposed state matches current state. {}, {}", targetRegionInfo, currentState);</span>
-<span class="source-line-no">2672</span><span id="line-2672">          continue;</span>
-<span class="source-line-no">2673</span><span id="line-2673">        }</span>
-<span class="source-line-no">2674</span><span id="line-2674">        MetaTableAccessor.updateRegionState(server.getConnection(), targetRegionInfo, targetState);</span>
-<span class="source-line-no">2675</span><span id="line-2675">        // Loads from meta again to refresh AM cache with the new region state</span>
-<span class="source-line-no">2676</span><span id="line-2676">        am.populateRegionStatesFromMeta(targetRegionInfo);</span>
-<span class="source-line-no">2677</span><span id="line-2677">        builder.addStates(RegionSpecifierAndState.newBuilder().setRegionSpecifier(spec)</span>
-<span class="source-line-no">2678</span><span id="line-2678">          .setState(currentState.convert()));</span>
-<span class="source-line-no">2679</span><span id="line-2679">      }</span>
-<span class="source-line-no">2680</span><span id="line-2680">    } catch (IOException e) {</span>
-<span class="source-line-no">2681</span><span id="line-2681">      throw new ServiceException(e);</span>
-<span class="source-line-no">2682</span><span id="line-2682">    }</span>
-<span class="source-line-no">2683</span><span id="line-2683">    return builder.build();</span>
-<span class="source-line-no">2684</span><span id="line-2684">  }</span>
-<span class="source-line-no">2685</span><span id="line-2685"></span>
-<span class="source-line-no">2686</span><span id="line-2686">  /**</span>
-<span class="source-line-no">2687</span><span id="line-2687">   * Get {@link RegionInfo} from Master using content of {@link RegionSpecifier} as key.</span>
-<span class="source-line-no">2688</span><span id="line-2688">   * @return {@link RegionInfo} found by decoding {@code rs} or {@code null} if {@code rs} is</span>
-<span class="source-line-no">2689</span><span id="line-2689">   *         unknown to the master.</span>
-<span class="source-line-no">2690</span><span id="line-2690">   * @throws ServiceException If some error occurs while querying META or parsing results.</span>
-<span class="source-line-no">2691</span><span id="line-2691">   */</span>
-<span class="source-line-no">2692</span><span id="line-2692">  private RegionInfo getRegionInfo(HBaseProtos.RegionSpecifier rs) throws ServiceException {</span>
-<span class="source-line-no">2693</span><span id="line-2693">    // TODO: this doesn't handle MOB regions. Should it? See the public method #getRegionInfo</span>
-<span class="source-line-no">2694</span><span id="line-2694">    final AssignmentManager am = server.getAssignmentManager();</span>
-<span class="source-line-no">2695</span><span id="line-2695">    final String encodedRegionName;</span>
-<span class="source-line-no">2696</span><span id="line-2696">    final RegionInfo info;</span>
-<span class="source-line-no">2697</span><span id="line-2697">    // first try resolving from the AM's caches.</span>
-<span class="source-line-no">2698</span><span id="line-2698">    switch (rs.getType()) {</span>
-<span class="source-line-no">2699</span><span id="line-2699">      case REGION_NAME:</span>
-<span class="source-line-no">2700</span><span id="line-2700">        final byte[] regionName = rs.getValue().toByteArray();</span>
-<span class="source-line-no">2701</span><span id="line-2701">        encodedRegionName = RegionInfo.encodeRegionName(regionName);</span>
-<span class="source-line-no">2702</span><span id="line-2702">        info = am.getRegionInfo(regionName);</span>
-<span class="source-line-no">2703</span><span id="line-2703">        break;</span>
-<span class="source-line-no">2704</span><span id="line-2704">      case ENCODED_REGION_NAME:</span>
-<span class="source-line-no">2705</span><span id="line-2705">        encodedRegionName = rs.getValue().toStringUtf8();</span>
-<span class="source-line-no">2706</span><span id="line-2706">        info = am.getRegionInfo(encodedRegionName);</span>
-<span class="source-line-no">2707</span><span id="line-2707">        break;</span>
-<span class="source-line-no">2708</span><span id="line-2708">      default:</span>
-<span class="source-line-no">2709</span><span id="line-2709">        throw new IllegalArgumentException("Unrecognized RegionSpecifierType " + rs.getType());</span>
-<span class="source-line-no">2710</span><span id="line-2710">    }</span>
-<span class="source-line-no">2711</span><span id="line-2711">    if (info != null) {</span>
-<span class="source-line-no">2712</span><span id="line-2712">      return info;</span>
-<span class="source-line-no">2713</span><span id="line-2713">    }</span>
-<span class="source-line-no">2714</span><span id="line-2714">    // fall back to a meta scan and check the cache again.</span>
-<span class="source-line-no">2715</span><span id="line-2715">    try {</span>
-<span class="source-line-no">2716</span><span id="line-2716">      am.populateRegionStatesFromMeta(encodedRegionName);</span>
-<span class="source-line-no">2717</span><span id="line-2717">    } catch (IOException e) {</span>
-<span class="source-line-no">2718</span><span id="line-2718">      throw new ServiceException(e);</span>
-<span class="source-line-no">2719</span><span id="line-2719">    }</span>
-<span class="source-line-no">2720</span><span id="line-2720">    return am.getRegionInfo(encodedRegionName);</span>
-<span class="source-line-no">2721</span><span id="line-2721">  }</span>
-<span class="source-line-no">2722</span><span id="line-2722"></span>
-<span class="source-line-no">2723</span><span id="line-2723">  /**</span>
-<span class="source-line-no">2724</span><span id="line-2724">   * @throws ServiceException If no MasterProcedureExecutor</span>
-<span class="source-line-no">2725</span><span id="line-2725">   */</span>
-<span class="source-line-no">2726</span><span id="line-2726">  private void checkMasterProcedureExecutor() throws ServiceException {</span>
-<span class="source-line-no">2727</span><span id="line-2727">    if (this.server.getMasterProcedureExecutor() == null) {</span>
-<span class="source-line-no">2728</span><span id="line-2728">      throw new ServiceException("Master's ProcedureExecutor not initialized; retry later");</span>
-<span class="source-line-no">2729</span><span id="line-2729">    }</span>
-<span class="source-line-no">2730</span><span id="line-2730">  }</span>
-<span class="source-line-no">2731</span><span id="line-2731"></span>
-<span class="source-line-no">2732</span><span id="line-2732">  /**</span>
-<span class="source-line-no">2733</span><span id="line-2733">   * A 'raw' version of assign that does bulk and can skirt Master state checks if override is set;</span>
-<span class="source-line-no">2734</span><span id="line-2734">   * i.e. assigns can be forced during Master startup or if RegionState is unclean. Used by HBCK2.</span>
-<span class="source-line-no">2735</span><span id="line-2735">   */</span>
-<span class="source-line-no">2736</span><span id="line-2736">  @Override</span>
-<span class="source-line-no">2737</span><span id="line-2737">  public MasterProtos.AssignsResponse assigns(RpcController controller,</span>
-<span class="source-line-no">2738</span><span id="line-2738">    MasterProtos.AssignsRequest request) throws ServiceException {</span>
-<span class="source-line-no">2739</span><span id="line-2739">    checkMasterProcedureExecutor();</span>
-<span class="source-line-no">2740</span><span id="line-2740">    final ProcedureExecutor&lt;MasterProcedureEnv&gt; pe = server.getMasterProcedureExecutor();</span>
-<span class="source-line-no">2741</span><span id="line-2741">    final AssignmentManager am = server.getAssignmentManager();</span>
-<span class="source-line-no">2742</span><span id="line-2742">    MasterProtos.AssignsResponse.Builder responseBuilder =</span>
-<span class="source-line-no">2743</span><span id="line-2743">      MasterProtos.AssignsResponse.newBuilder();</span>
-<span class="source-line-no">2744</span><span id="line-2744">    final boolean override = request.getOverride();</span>
-<span class="source-line-no">2745</span><span id="line-2745">    final boolean force = request.getForce();</span>
-<span class="source-line-no">2746</span><span id="line-2746">    LOG.info("{} assigns, override={}", server.getClientIdAuditPrefix(), override);</span>
-<span class="source-line-no">2747</span><span id="line-2747">    for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) {</span>
-<span class="source-line-no">2748</span><span id="line-2748">      final RegionInfo info = getRegionInfo(rs);</span>
-<span class="source-line-no">2749</span><span id="line-2749">      if (info == null) {</span>
-<span class="source-line-no">2750</span><span id="line-2750">        LOG.info("Unknown region {}", rs);</span>
-<span class="source-line-no">2751</span><span id="line-2751">        continue;</span>
-<span class="source-line-no">2752</span><span id="line-2752">      }</span>
-<span class="source-line-no">2753</span><span id="line-2753">      responseBuilder.addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, force))</span>
-<span class="source-line-no">2754</span><span id="line-2754">        .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID));</span>
-<span class="source-line-no">2755</span><span id="line-2755">    }</span>
-<span class="source-line-no">2756</span><span id="line-2756">    return responseBuilder.build();</span>
-<span class="source-line-no">2757</span><span id="line-2757">  }</span>
-<span class="source-line-no">2758</span><span id="line-2758"></span>
-<span class="source-line-no">2759</span><span id="line-2759">  /**</span>
-<span class="source-line-no">2760</span><span id="line-2760">   * A 'raw' version of unassign that does bulk and can skirt Master state checks if override is</span>
-<span class="source-line-no">2761</span><span id="line-2761">   * set; i.e. unassigns can be forced during Master startup or if RegionState is unclean. Used by</span>
-<span class="source-line-no">2762</span><span id="line-2762">   * HBCK2.</span>
-<span class="source-line-no">2763</span><span id="line-2763">   */</span>
-<span class="source-line-no">2764</span><span id="line-2764">  @Override</span>
-<span class="source-line-no">2765</span><span id="line-2765">  public MasterProtos.UnassignsResponse unassigns(RpcController controller,</span>
-<span class="source-line-no">2766</span><span id="line-2766">    MasterProtos.UnassignsRequest request) throws ServiceException {</span>
-<span class="source-line-no">2767</span><span id="line-2767">    checkMasterProcedureExecutor();</span>
-<span class="source-line-no">2768</span><span id="line-2768">    final ProcedureExecutor&lt;MasterProcedureEnv&gt; pe = server.getMasterProcedureExecutor();</span>
-<span class="source-line-no">2769</span><span id="line-2769">    final AssignmentManager am = server.getAssignmentManager();</span>
-<span class="source-line-no">2770</span><span id="line-2770">    MasterProtos.UnassignsResponse.Builder responseBuilder =</span>
-<span class="source-line-no">2771</span><span id="line-2771">      MasterProtos.UnassignsResponse.newBuilder();</span>
-<span class="source-line-no">2772</span><span id="line-2772">    final boolean override = request.getOverride();</span>
-<span class="source-line-no">2773</span><span id="line-2773">    final boolean force = request.getForce();</span>
-<span class="source-line-no">2774</span><span id="line-2774">    LOG.info("{} unassigns, override={}", server.getClientIdAuditPrefix(), override);</span>
-<span class="source-line-no">2775</span><span id="line-2775">    for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) {</span>
-<span class="source-line-no">2776</span><span id="line-2776">      final RegionInfo info = getRegionInfo(rs);</span>
-<span class="source-line-no">2777</span><span id="line-2777">      if (info == null) {</span>
-<span class="source-line-no">2778</span><span id="line-2778">        LOG.info("Unknown region {}", rs);</span>
-<span class="source-line-no">2779</span><span id="line-2779">        continue;</span>
-<span class="source-line-no">2780</span><span id="line-2780">      }</span>
-<span class="source-line-no">2781</span><span id="line-2781">      responseBuilder</span>
-<span class="source-line-no">2782</span><span id="line-2782">        .addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override, force))</span>
-<span class="source-line-no">2783</span><span id="line-2783">          .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID));</span>
-<span class="source-line-no">2784</span><span id="line-2784">    }</span>
-<span class="source-line-no">2785</span><span id="line-2785">    return responseBuilder.build();</span>
-<span class="source-line-no">2786</span><span id="line-2786">  }</span>
-<span class="source-line-no">2787</span><span id="line-2787"></span>
-<span class="source-line-no">2788</span><span id="line-2788">  /**</span>
-<span class="source-line-no">2789</span><span id="line-2789">   * Bypass specified procedure to completion. Procedure is marked completed but no actual work is</span>
-<span class="source-line-no">2790</span><span id="line-2790">   * done from the current state/ step onwards. Parents of the procedure are also marked for bypass.</span>
-<span class="source-line-no">2791</span><span id="line-2791">   * NOTE: this is a dangerous operation and may be used to unstuck buggy procedures. This may leave</span>
-<span class="source-line-no">2792</span><span id="line-2792">   * system in incoherent state. This may need to be followed by some cleanup steps/ actions by</span>
-<span class="source-line-no">2793</span><span id="line-2793">   * operator.</span>
-<span class="source-line-no">2794</span><span id="line-2794">   * @return BypassProcedureToCompletionResponse indicating success or failure</span>
-<span class="source-line-no">2795</span><span id="line-2795">   */</span>
-<span class="source-line-no">2796</span><span id="line-2796">  @Override</span>
-<span class="source-line-no">2797</span><span id="line-2797">  public MasterProtos.BypassProcedureResponse bypassProcedure(RpcController controller,</span>
-<span class="source-line-no">2798</span><span id="line-2798">    MasterProtos.BypassProcedureRequest request) throws ServiceException {</span>
-<span class="source-line-no">2799</span><span id="line-2799">    try {</span>
-<span class="source-line-no">2800</span><span id="line-2800">      LOG.info("{} bypass procedures={}, waitTime={}, override={}, recursive={}",</span>
-<span class="source-line-no">2801</span><span id="line-2801">        server.getClientIdAuditPrefix(), request.getProcIdList(), request.getWaitTime(),</span>
-<span class="source-line-no">2802</span><span id="line-2802">        request.getOverride(), request.getRecursive());</span>
-<span class="source-line-no">2803</span><span id="line-2803">      List&lt;Boolean&gt; ret =</span>
-<span class="source-line-no">2804</span><span id="line-2804">        server.getMasterProcedureExecutor().bypassProcedure(request.getProcIdList(),</span>
-<span class="source-line-no">2805</span><span id="line-2805">          request.getWaitTime(), request.getOverride(), request.getRecursive());</span>
-<span class="source-line-no">2806</span><span id="line-2806">      return MasterProtos.BypassProcedureResponse.newBuilder().addAllBypassed(ret).build();</span>
-<span class="source-line-no">2807</span><span id="line-2807">    } catch (IOException e) {</span>
-<span class="source-line-no">2808</span><span id="line-2808">      throw new ServiceException(e);</span>
-<span class="source-line-no">2809</span><span id="line-2809">    }</span>
-<span class="source-line-no">2810</span><span id="line-2810">  }</span>
-<span class="source-line-no">2811</span><span id="line-2811"></span>
-<span class="source-line-no">2812</span><span id="line-2812">  @Override</span>
-<span class="source-line-no">2813</span><span id="line-2813">  public MasterProtos.ScheduleServerCrashProcedureResponse scheduleServerCrashProcedure(</span>
-<span class="source-line-no">2814</span><span id="line-2814">    RpcController controller, MasterProtos.ScheduleServerCrashProcedureRequest request)</span>
-<span class="source-line-no">2815</span><span id="line-2815">    throws ServiceException {</span>
-<span class="source-line-no">2816</span><span id="line-2816">    List&lt;Long&gt; pids = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">2817</span><span id="line-2817">    for (HBaseProtos.ServerName sn : request.getServerNameList()) {</span>
-<span class="source-line-no">2818</span><span id="line-2818">      ServerName serverName = ProtobufUtil.toServerName(sn);</span>
-<span class="source-line-no">2819</span><span id="line-2819">      LOG.info("{} schedule ServerCrashProcedure for {}", this.server.getClientIdAuditPrefix(),</span>
-<span class="source-line-no">2820</span><span id="line-2820">        serverName);</span>
-<span class="source-line-no">2821</span><span id="line-2821">      if (shouldSubmitSCP(serverName)) {</span>
-<span class="source-line-no">2822</span><span id="line-2822">        pids.add(this.server.getServerManager().expireServer(serverName, true));</span>
-<span class="source-line-no">2823</span><span id="line-2823">      } else {</span>
-<span class="source-line-no">2824</span><span id="line-2824">        pids.add(Procedure.NO_PROC_ID);</span>
-<span class="source-line-no">2825</span><span id="line-2825">      }</span>
-<span class="source-line-no">2826</span><span id="line-2826">    }</span>
-<span class="source-line-no">2827</span><span id="line-2827">    return MasterProtos.ScheduleServerCrashProcedureResponse.newBuilder().addAllPid(pids).build();</span>
-<span class="source-line-no">2828</span><span id="line-2828">  }</span>
-<span class="source-line-no">2829</span><span id="line-2829"></span>
-<span class="source-line-no">2830</span><span id="line-2830">  @Override</span>
-<span class="source-line-no">2831</span><span id="line-2831">  public MasterProtos.ScheduleSCPsForUnknownServersResponse scheduleSCPsForUnknownServers(</span>
-<span class="source-line-no">2832</span><span id="line-2832">    RpcController controller, MasterProtos.ScheduleSCPsForUnknownServersRequest request)</span>
-<span class="source-line-no">2833</span><span id="line-2833">    throws ServiceException {</span>
-<span class="source-line-no">2834</span><span id="line-2834">    List&lt;Long&gt; pids = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">2835</span><span id="line-2835">    final Set&lt;ServerName&gt; serverNames = server.getAssignmentManager().getRegionStates()</span>
-<span class="source-line-no">2836</span><span id="line-2836">      .getRegionStates().stream().map(RegionState::getServerName).collect(Collectors.toSet());</span>
-<span class="source-line-no">2837</span><span id="line-2837"></span>
-<span class="source-line-no">2838</span><span id="line-2838">    final Set&lt;ServerName&gt; unknownServerNames = serverNames.stream()</span>
-<span class="source-line-no">2839</span><span id="line-2839">      .filter(sn -&gt; server.getServerManager().isServerUnknown(sn)).collect(Collectors.toSet());</span>
-<span class="source-line-no">2840</span><span id="line-2840"></span>
-<span class="source-line-no">2841</span><span id="line-2841">    for (ServerName sn : unknownServerNames) {</span>
-<span class="source-line-no">2842</span><span id="line-2842">      LOG.info("{} schedule ServerCrashProcedure for unknown {}",</span>
-<span class="source-line-no">2843</span><span id="line-2843">        this.server.getClientIdAuditPrefix(), sn);</span>
-<span class="source-line-no">2844</span><span id="line-2844">      if (shouldSubmitSCP(sn)) {</span>
-<span class="source-line-no">2845</span><span id="line-2845">        pids.add(this.server.getServerManager().expireServer(sn, true));</span>
-<span class="source-line-no">2846</span><span id="line-2846">      } else {</span>
-<span class="source-line-no">2847</span><span id="line-2847">        pids.add(Procedure.NO_PROC_ID);</span>
-<span class="source-line-no">2848</span><span id="line-2848">      }</span>
-<span class="source-line-no">2849</span><span id="line-2849">    }</span>
-<span class="source-line-no">2850</span><span id="line-2850">    return MasterProtos.ScheduleSCPsForUnknownServersResponse.newBuilder().addAllPid(pids).build();</span>
-<span class="source-line-no">2851</span><span id="line-2851">  }</span>
-<span class="source-line-no">2852</span><span id="line-2852"></span>
-<span class="source-line-no">2853</span><span id="line-2853">  @Override</span>
-<span class="source-line-no">2854</span><span id="line-2854">  public FixMetaResponse fixMeta(RpcController controller, FixMetaRequest request)</span>
-<span class="source-line-no">2855</span><span id="line-2855">    throws ServiceException {</span>
-<span class="source-line-no">2856</span><span id="line-2856">    rpcPreCheck("fixMeta");</span>
-<span class="source-line-no">2857</span><span id="line-2857">    try {</span>
-<span class="source-line-no">2858</span><span id="line-2858">      MetaFixer mf = new MetaFixer(this.server);</span>
-<span class="source-line-no">2859</span><span id="line-2859">      mf.fix();</span>
-<span class="source-line-no">2860</span><span id="line-2860">      return FixMetaResponse.newBuilder().build();</span>
-<span class="source-line-no">2861</span><span id="line-2861">    } catch (IOException ioe) {</span>
-<span class="source-line-no">2862</span><span id="line-2862">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2863</span><span id="line-2863">    }</span>
-<span class="source-line-no">2864</span><span id="line-2864">  }</span>
-<span class="source-line-no">2865</span><span id="line-2865"></span>
-<span class="source-line-no">2866</span><span id="line-2866">  @Override</span>
-<span class="source-line-no">2867</span><span id="line-2867">  public SwitchRpcThrottleResponse switchRpcThrottle(RpcController controller,</span>
-<span class="source-line-no">2868</span><span id="line-2868">    SwitchRpcThrottleRequest request) throws ServiceException {</span>
-<span class="source-line-no">2869</span><span id="line-2869">    try {</span>
-<span class="source-line-no">2870</span><span id="line-2870">      server.checkInitialized();</span>
-<span class="source-line-no">2871</span><span id="line-2871">      return server.getMasterQuotaManager().switchRpcThrottle(request);</span>
-<span class="source-line-no">2872</span><span id="line-2872">    } catch (Exception e) {</span>
-<span class="source-line-no">2873</span><span id="line-2873">      throw new ServiceException(e);</span>
-<span class="source-line-no">2874</span><span id="line-2874">    }</span>
-<span class="source-line-no">2875</span><span id="line-2875">  }</span>
-<span class="source-line-no">2876</span><span id="line-2876"></span>
-<span class="source-line-no">2877</span><span id="line-2877">  @Override</span>
-<span class="source-line-no">2878</span><span id="line-2878">  public MasterProtos.IsRpcThrottleEnabledResponse isRpcThrottleEnabled(RpcController controller,</span>
-<span class="source-line-no">2879</span><span id="line-2879">    MasterProtos.IsRpcThrottleEnabledRequest request) throws ServiceException {</span>
-<span class="source-line-no">2880</span><span id="line-2880">    try {</span>
-<span class="source-line-no">2881</span><span id="line-2881">      server.checkInitialized();</span>
-<span class="source-line-no">2882</span><span id="line-2882">      return server.getMasterQuotaManager().isRpcThrottleEnabled(request);</span>
-<span class="source-line-no">2883</span><span id="line-2883">    } catch (Exception e) {</span>
-<span class="source-line-no">2884</span><span id="line-2884">      throw new ServiceException(e);</span>
-<span class="source-line-no">2885</span><span id="line-2885">    }</span>
-<span class="source-line-no">2886</span><span id="line-2886">  }</span>
-<span class="source-line-no">2887</span><span id="line-2887"></span>
-<span class="source-line-no">2888</span><span id="line-2888">  @Override</span>
-<span class="source-line-no">2889</span><span id="line-2889">  public SwitchExceedThrottleQuotaResponse switchExceedThrottleQuota(RpcController controller,</span>
-<span class="source-line-no">2890</span><span id="line-2890">    SwitchExceedThrottleQuotaRequest request) throws ServiceException {</span>
-<span class="source-line-no">2891</span><span id="line-2891">    try {</span>
-<span class="source-line-no">2892</span><span id="line-2892">      server.checkInitialized();</span>
-<span class="source-line-no">2893</span><span id="line-2893">      return server.getMasterQuotaManager().switchExceedThrottleQuota(request);</span>
-<span class="source-line-no">2894</span><span id="line-2894">    } catch (Exception e) {</span>
-<span class="source-line-no">2895</span><span id="line-2895">      throw new ServiceException(e);</span>
-<span class="source-line-no">2896</span><span id="line-2896">    }</span>
-<span class="source-line-no">2897</span><span id="line-2897">  }</span>
-<span class="source-line-no">2898</span><span id="line-2898"></span>
-<span class="source-line-no">2899</span><span id="line-2899">  @Override</span>
-<span class="source-line-no">2900</span><span id="line-2900">  public GrantResponse grant(RpcController controller, GrantRequest request)</span>
-<span class="source-line-no">2901</span><span id="line-2901">    throws ServiceException {</span>
-<span class="source-line-no">2902</span><span id="line-2902">    try {</span>
-<span class="source-line-no">2903</span><span id="line-2903">      server.checkInitialized();</span>
-<span class="source-line-no">2904</span><span id="line-2904">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
-<span class="source-line-no">2905</span><span id="line-2905">        final UserPermission perm =</span>
-<span class="source-line-no">2906</span><span id="line-2906">          ShadedAccessControlUtil.toUserPermission(request.getUserPermission());</span>
-<span class="source-line-no">2907</span><span id="line-2907">        boolean mergeExistingPermissions = request.getMergeExistingPermissions();</span>
-<span class="source-line-no">2908</span><span id="line-2908">        server.cpHost.preGrant(perm, mergeExistingPermissions);</span>
-<span class="source-line-no">2909</span><span id="line-2909">        try (Table table = server.getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {</span>
-<span class="source-line-no">2910</span><span id="line-2910">          PermissionStorage.addUserPermission(getConfiguration(), perm, table,</span>
-<span class="source-line-no">2911</span><span id="line-2911">            mergeExistingPermissions);</span>
-<span class="source-line-no">2912</span><span id="line-2912">        }</span>
-<span class="source-line-no">2913</span><span id="line-2913">        server.cpHost.postGrant(perm, mergeExistingPermissions);</span>
-<span class="source-line-no">2914</span><span id="line-2914">        return GrantResponse.getDefaultInstance();</span>
-<span class="source-line-no">2915</span><span id="line-2915">      } else {</span>
-<span class="source-line-no">2916</span><span id="line-2916">        throw new DoNotRetryIOException(</span>
-<span class="source-line-no">2917</span><span id="line-2917">          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span>
-<span class="source-line-no">2918</span><span id="line-2918">      }</span>
-<span class="source-line-no">2919</span><span id="line-2919">    } catch (IOException ioe) {</span>
-<span class="source-line-no">2920</span><span id="line-2920">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2921</span><span id="line-2921">    }</span>
-<span class="source-line-no">2922</span><span id="line-2922">  }</span>
-<span class="source-line-no">2923</span><span id="line-2923"></span>
-<span class="source-line-no">2924</span><span id="line-2924">  @Override</span>
-<span class="source-line-no">2925</span><span id="line-2925">  public RevokeResponse revoke(RpcController controller, RevokeRequest request)</span>
-<span class="source-line-no">2926</span><span id="line-2926">    throws ServiceException {</span>
-<span class="source-line-no">2927</span><span id="line-2927">    try {</span>
-<span class="source-line-no">2928</span><span id="line-2928">      server.checkInitialized();</span>
-<span class="source-line-no">2929</span><span id="line-2929">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
-<span class="source-line-no">2930</span><span id="line-2930">        final UserPermission userPermission =</span>
-<span class="source-line-no">2931</span><span id="line-2931">          ShadedAccessControlUtil.toUserPermission(request.getUserPermission());</span>
-<span class="source-line-no">2932</span><span id="line-2932">        server.cpHost.preRevoke(userPermission);</span>
-<span class="source-line-no">2933</span><span id="line-2933">        try (Table table = server.getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {</span>
-<span class="source-line-no">2934</span><span id="line-2934">          PermissionStorage.removeUserPermission(server.getConfiguration(), userPermission, table);</span>
-<span class="source-line-no">2935</span><span id="line-2935">        }</span>
-<span class="source-line-no">2936</span><span id="line-2936">        server.cpHost.postRevoke(userPermission);</span>
-<span class="source-line-no">2937</span><span id="line-2937">        return RevokeResponse.getDefaultInstance();</span>
-<span class="source-line-no">2938</span><span id="line-2938">      } else {</span>
-<span class="source-line-no">2939</span><span id="line-2939">        throw new DoNotRetryIOException(</span>
-<span class="source-line-no">2940</span><span id="line-2940">          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span>
-<span class="source-line-no">2941</span><span id="line-2941">      }</span>
-<span class="source-line-no">2942</span><span id="line-2942">    } catch (IOException ioe) {</span>
-<span class="source-line-no">2943</span><span id="line-2943">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2944</span><span id="line-2944">    }</span>
-<span class="source-line-no">2945</span><span id="line-2945">  }</span>
-<span class="source-line-no">2946</span><span id="line-2946"></span>
-<span class="source-line-no">2947</span><span id="line-2947">  @Override</span>
-<span class="source-line-no">2948</span><span id="line-2948">  public GetUserPermissionsResponse getUserPermissions(RpcController controller,</span>
-<span class="source-line-no">2949</span><span id="line-2949">    GetUserPermissionsRequest request) throws ServiceException {</span>
-<span class="source-line-no">2950</span><span id="line-2950">    try {</span>
-<span class="source-line-no">2951</span><span id="line-2951">      server.checkInitialized();</span>
-<span class="source-line-no">2952</span><span id="line-2952">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
-<span class="source-line-no">2953</span><span id="line-2953">        final String userName = request.hasUserName() ? request.getUserName().toStringUtf8() : null;</span>
-<span class="source-line-no">2954</span><span id="line-2954">        String namespace =</span>
-<span class="source-line-no">2955</span><span id="line-2955">          request.hasNamespaceName() ? request.getNamespaceName().toStringUtf8() : null;</span>
-<span class="source-line-no">2956</span><span id="line-2956">        TableName table =</span>
-<span class="source-line-no">2957</span><span id="line-2957">          request.hasTableName() ? ProtobufUtil.toTableName(request.getTableName()) : null;</span>
-<span class="source-line-no">2958</span><span id="line-2958">        byte[] cf = request.hasColumnFamily() ? request.getColumnFamily().toByteArray() : null;</span>
-<span class="source-line-no">2959</span><span id="line-2959">        byte[] cq =</span>
-<span class="source-line-no">2960</span><span id="line-2960">          request.hasColumnQualifier() ? request.getColumnQualifier().toByteArray() : null;</span>
-<span class="source-line-no">2961</span><span id="line-2961">        Type permissionType = request.hasType() ? request.getType() : null;</span>
-<span class="source-line-no">2962</span><span id="line-2962">        server.getMasterCoprocessorHost().preGetUserPermissions(userName, namespace, table, cf, cq);</span>
-<span class="source-line-no">2963</span><span id="line-2963"></span>
-<span class="source-line-no">2964</span><span id="line-2964">        List&lt;UserPermission&gt; perms = null;</span>
-<span class="source-line-no">2965</span><span id="line-2965">        if (permissionType == Type.Table) {</span>
-<span class="source-line-no">2966</span><span id="line-2966">          boolean filter = (cf != null || userName != null) ? true : false;</span>
-<span class="source-line-no">2967</span><span id="line-2967">          perms = PermissionStorage.getUserTablePermissions(server.getConfiguration(), table, cf,</span>
-<span class="source-line-no">2968</span><span id="line-2968">            cq, userName, filter);</span>
-<span class="source-line-no">2969</span><span id="line-2969">        } else if (permissionType == Type.Namespace) {</span>
-<span class="source-line-no">2970</span><span id="line-2970">          perms = PermissionStorage.getUserNamespacePermissions(server.getConfiguration(),</span>
-<span class="source-line-no">2971</span><span id="line-2971">            namespace, userName, userName != null ? true : false);</span>
-<span class="source-line-no">2972</span><span id="line-2972">        } else {</span>
-<span class="source-line-no">2973</span><span id="line-2973">          perms = PermissionStorage.getUserPermissions(server.getConfiguration(), null, null, null,</span>
-<span class="source-line-no">2974</span><span id="line-2974">            userName, userName != null ? true : false);</span>
-<span class="source-line-no">2975</span><span id="line-2975">          // Skip super users when filter user is specified</span>
-<span class="source-line-no">2976</span><span id="line-2976">          if (userName == null) {</span>
-<span class="source-line-no">2977</span><span id="line-2977">            // Adding superusers explicitly to the result set as PermissionStorage do not store</span>
-<span class="source-line-no">2978</span><span id="line-2978">            // them. Also using acl as table name to be inline with the results of global admin and</span>
-<span class="source-line-no">2979</span><span id="line-2979">            // will help in avoiding any leakage of information about being superusers.</span>
-<span class="source-line-no">2980</span><span id="line-2980">            for (String user : Superusers.getSuperUsers()) {</span>
-<span class="source-line-no">2981</span><span id="line-2981">              perms.add(new UserPermission(user,</span>
-<span class="source-line-no">2982</span><span id="line-2982">                Permission.newBuilder().withActions(Action.values()).build()));</span>
-<span class="source-line-no">2983</span><span id="line-2983">            }</span>
-<span class="source-line-no">2984</span><span id="line-2984">          }</span>
-<span class="source-line-no">2985</span><span id="line-2985">        }</span>
-<span class="source-line-no">2986</span><span id="line-2986"></span>
-<span class="source-line-no">2987</span><span id="line-2987">        server.getMasterCoprocessorHost().postGetUserPermissions(userName, namespace, table, cf,</span>
-<span class="source-line-no">2988</span><span id="line-2988">          cq);</span>
-<span class="source-line-no">2989</span><span id="line-2989">        AccessControlProtos.GetUserPermissionsResponse response =</span>
-<span class="source-line-no">2990</span><span id="line-2990">          ShadedAccessControlUtil.buildGetUserPermissionsResponse(perms);</span>
-<span class="source-line-no">2991</span><span id="line-2991">        return response;</span>
-<span class="source-line-no">2992</span><span id="line-2992">      } else {</span>
-<span class="source-line-no">2993</span><span id="line-2993">        throw new DoNotRetryIOException(</span>
-<span class="source-line-no">2994</span><span id="line-2994">          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span>
-<span class="source-line-no">2995</span><span id="line-2995">      }</span>
-<span class="source-line-no">2996</span><span id="line-2996">    } catch (IOException ioe) {</span>
-<span class="source-line-no">2997</span><span id="line-2997">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">2998</span><span id="line-2998">    }</span>
-<span class="source-line-no">2999</span><span id="line-2999">  }</span>
-<span class="source-line-no">3000</span><span id="line-3000"></span>
-<span class="source-line-no">3001</span><span id="line-3001">  @Override</span>
-<span class="source-line-no">3002</span><span id="line-3002">  public HasUserPermissionsResponse hasUserPermissions(RpcController controller,</span>
-<span class="source-line-no">3003</span><span id="line-3003">    HasUserPermissionsRequest request) throws ServiceException {</span>
-<span class="source-line-no">3004</span><span id="line-3004">    try {</span>
-<span class="source-line-no">3005</span><span id="line-3005">      server.checkInitialized();</span>
-<span class="source-line-no">3006</span><span id="line-3006">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
-<span class="source-line-no">3007</span><span id="line-3007">        User caller = RpcServer.getRequestUser().orElse(null);</span>
-<span class="source-line-no">3008</span><span id="line-3008">        String userName =</span>
-<span class="source-line-no">3009</span><span id="line-3009">          request.hasUserName() ? request.getUserName().toStringUtf8() : caller.getShortName();</span>
-<span class="source-line-no">3010</span><span id="line-3010">        List&lt;Permission&gt; permissions = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">3011</span><span id="line-3011">        for (int i = 0; i &lt; request.getPermissionCount(); i++) {</span>
-<span class="source-line-no">3012</span><span id="line-3012">          permissions.add(ShadedAccessControlUtil.toPermission(request.getPermission(i)));</span>
-<span class="source-line-no">3013</span><span id="line-3013">        }</span>
-<span class="source-line-no">3014</span><span id="line-3014">        server.getMasterCoprocessorHost().preHasUserPermissions(userName, permissions);</span>
-<span class="source-line-no">3015</span><span id="line-3015">        if (!caller.getShortName().equals(userName)) {</span>
-<span class="source-line-no">3016</span><span id="line-3016">          List&lt;String&gt; groups = AccessChecker.getUserGroups(userName);</span>
-<span class="source-line-no">3017</span><span id="line-3017">          caller = new InputUser(userName, groups.toArray(new String[groups.size()]));</span>
-<span class="source-line-no">3018</span><span id="line-3018">        }</span>
-<span class="source-line-no">3019</span><span id="line-3019">        List&lt;Boolean&gt; hasUserPermissions = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">3020</span><span id="line-3020">        if (getAccessChecker() != null) {</span>
-<span class="source-line-no">3021</span><span id="line-3021">          for (Permission permission : permissions) {</span>
-<span class="source-line-no">3022</span><span id="line-3022">            boolean hasUserPermission =</span>
-<span class="source-line-no">3023</span><span id="line-3023">              getAccessChecker().hasUserPermission(caller, "hasUserPermissions", permission);</span>
-<span class="source-line-no">3024</span><span id="line-3024">            hasUserPermissions.add(hasUserPermission);</span>
-<span class="source-line-no">3025</span><span id="line-3025">          }</span>
-<span class="source-line-no">3026</span><span id="line-3026">        } else {</span>
-<span class="source-line-no">3027</span><span id="line-3027">          for (int i = 0; i &lt; permissions.size(); i++) {</span>
-<span class="source-line-no">3028</span><span id="line-3028">            hasUserPermissions.add(true);</span>
-<span class="source-line-no">3029</span><span id="line-3029">          }</span>
-<span class="source-line-no">3030</span><span id="line-3030">        }</span>
-<span class="source-line-no">3031</span><span id="line-3031">        server.getMasterCoprocessorHost().postHasUserPermissions(userName, permissions);</span>
-<span class="source-line-no">3032</span><span id="line-3032">        HasUserPermissionsResponse.Builder builder =</span>
-<span class="source-line-no">3033</span><span id="line-3033">          HasUserPermissionsResponse.newBuilder().addAllHasUserPermission(hasUserPermissions);</span>
-<span class="source-line-no">3034</span><span id="line-3034">        return builder.build();</span>
-<span class="source-line-no">3035</span><span id="line-3035">      } else {</span>
-<span class="source-line-no">3036</span><span id="line-3036">        throw new DoNotRetryIOException(</span>
-<span class="source-line-no">3037</span><span id="line-3037">          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span>
-<span class="source-line-no">3038</span><span id="line-3038">      }</span>
-<span class="source-line-no">3039</span><span id="line-3039">    } catch (IOException ioe) {</span>
-<span class="source-line-no">3040</span><span id="line-3040">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">3041</span><span id="line-3041">    }</span>
-<span class="source-line-no">3042</span><span id="line-3042">  }</span>
-<span class="source-line-no">3043</span><span id="line-3043"></span>
-<span class="source-line-no">3044</span><span id="line-3044">  private boolean shouldSubmitSCP(ServerName serverName) {</span>
-<span class="source-line-no">3045</span><span id="line-3045">    // check if there is already a SCP of this server running</span>
-<span class="source-line-no">3046</span><span id="line-3046">    List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procedures =</span>
-<span class="source-line-no">3047</span><span id="line-3047">      server.getMasterProcedureExecutor().getProcedures();</span>
-<span class="source-line-no">3048</span><span id="line-3048">    for (Procedure&lt;MasterProcedureEnv&gt; procedure : procedures) {</span>
-<span class="source-line-no">3049</span><span id="line-3049">      if (procedure instanceof ServerCrashProcedure) {</span>
-<span class="source-line-no">3050</span><span id="line-3050">        if (</span>
-<span class="source-line-no">3051</span><span id="line-3051">          serverName.compareTo(((ServerCrashProcedure) procedure).getServerName()) == 0</span>
-<span class="source-line-no">3052</span><span id="line-3052">            &amp;&amp; !procedure.isFinished()</span>
-<span class="source-line-no">3053</span><span id="line-3053">        ) {</span>
-<span class="source-line-no">3054</span><span id="line-3054">          LOG.info("there is already a SCP of this server {} running, pid {}", serverName,</span>
-<span class="source-line-no">3055</span><span id="line-3055">            procedure.getProcId());</span>
-<span class="source-line-no">3056</span><span id="line-3056">          return false;</span>
-<span class="source-line-no">3057</span><span id="line-3057">        }</span>
-<span class="source-line-no">3058</span><span id="line-3058">      }</span>
-<span class="source-line-no">3059</span><span id="line-3059">    }</span>
-<span class="source-line-no">3060</span><span id="line-3060">    return true;</span>
-<span class="source-line-no">3061</span><span id="line-3061">  }</span>
-<span class="source-line-no">3062</span><span id="line-3062"></span>
-<span class="source-line-no">3063</span><span id="line-3063">  @Override</span>
-<span class="source-line-no">3064</span><span id="line-3064">  public GetRSGroupInfoResponse getRSGroupInfo(RpcController controller,</span>
-<span class="source-line-no">3065</span><span id="line-3065">    GetRSGroupInfoRequest request) throws ServiceException {</span>
-<span class="source-line-no">3066</span><span id="line-3066">    String groupName = request.getRSGroupName();</span>
-<span class="source-line-no">3067</span><span id="line-3067">    LOG.info(</span>
-<span class="source-line-no">3068</span><span id="line-3068">      server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, group=" + groupName);</span>
-<span class="source-line-no">3069</span><span id="line-3069">    try {</span>
-<span class="source-line-no">3070</span><span id="line-3070">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3071</span><span id="line-3071">        server.getMasterCoprocessorHost().preGetRSGroupInfo(groupName);</span>
-<span class="source-line-no">3072</span><span id="line-3072">      }</span>
-<span class="source-line-no">3073</span><span id="line-3073">      RSGroupInfo rsGroupInfo = server.getRSGroupInfoManager().getRSGroup(groupName);</span>
-<span class="source-line-no">3074</span><span id="line-3074">      GetRSGroupInfoResponse resp;</span>
-<span class="source-line-no">3075</span><span id="line-3075">      if (rsGroupInfo != null) {</span>
-<span class="source-line-no">3076</span><span id="line-3076">        resp = GetRSGroupInfoResponse.newBuilder()</span>
-<span class="source-line-no">3077</span><span id="line-3077">          .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span>
-<span class="source-line-no">3078</span><span id="line-3078">      } else {</span>
-<span class="source-line-no">3079</span><span id="line-3079">        resp = GetRSGroupInfoResponse.getDefaultInstance();</span>
-<span class="source-line-no">3080</span><span id="line-3080">      }</span>
-<span class="source-line-no">3081</span><span id="line-3081">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3082</span><span id="line-3082">        server.getMasterCoprocessorHost().postGetRSGroupInfo(groupName);</span>
-<span class="source-line-no">3083</span><span id="line-3083">      }</span>
-<span class="source-line-no">3084</span><span id="line-3084">      return resp;</span>
-<span class="source-line-no">3085</span><span id="line-3085">    } catch (IOException e) {</span>
-<span class="source-line-no">3086</span><span id="line-3086">      throw new ServiceException(e);</span>
-<span class="source-line-no">3087</span><span id="line-3087">    }</span>
-<span class="source-line-no">3088</span><span id="line-3088">  }</span>
-<span class="source-line-no">3089</span><span id="line-3089"></span>
-<span class="source-line-no">3090</span><span id="line-3090">  @Override</span>
-<span class="source-line-no">3091</span><span id="line-3091">  public GetRSGroupInfoOfTableResponse getRSGroupInfoOfTable(RpcController controller,</span>
-<span class="source-line-no">3092</span><span id="line-3092">    GetRSGroupInfoOfTableRequest request) throws ServiceException {</span>
-<span class="source-line-no">3093</span><span id="line-3093">    TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span>
-<span class="source-line-no">3094</span><span id="line-3094">    LOG.info(</span>
-<span class="source-line-no">3095</span><span id="line-3095">      server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, table=" + tableName);</span>
-<span class="source-line-no">3096</span><span id="line-3096">    try {</span>
-<span class="source-line-no">3097</span><span id="line-3097">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3098</span><span id="line-3098">        server.getMasterCoprocessorHost().preGetRSGroupInfoOfTable(tableName);</span>
-<span class="source-line-no">3099</span><span id="line-3099">      }</span>
-<span class="source-line-no">3100</span><span id="line-3100">      GetRSGroupInfoOfTableResponse resp;</span>
-<span class="source-line-no">3101</span><span id="line-3101">      TableDescriptor td = server.getTableDescriptors().get(tableName);</span>
-<span class="source-line-no">3102</span><span id="line-3102">      if (td == null) {</span>
-<span class="source-line-no">3103</span><span id="line-3103">        resp = GetRSGroupInfoOfTableResponse.getDefaultInstance();</span>
-<span class="source-line-no">3104</span><span id="line-3104">      } else {</span>
-<span class="source-line-no">3105</span><span id="line-3105">        RSGroupInfo rsGroupInfo =</span>
-<span class="source-line-no">3106</span><span id="line-3106">          RSGroupUtil.getRSGroupInfo(server, server.getRSGroupInfoManager(), tableName)</span>
-<span class="source-line-no">3107</span><span id="line-3107">            .orElse(server.getRSGroupInfoManager().getRSGroup(RSGroupInfo.DEFAULT_GROUP));</span>
-<span class="source-line-no">3108</span><span id="line-3108">        resp = GetRSGroupInfoOfTableResponse.newBuilder()</span>
-<span class="source-line-no">3109</span><span id="line-3109">          .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span>
-<span class="source-line-no">3110</span><span id="line-3110">      }</span>
-<span class="source-line-no">3111</span><span id="line-3111">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3112</span><span id="line-3112">        server.getMasterCoprocessorHost().postGetRSGroupInfoOfTable(tableName);</span>
-<span class="source-line-no">3113</span><span id="line-3113">      }</span>
-<span class="source-line-no">3114</span><span id="line-3114">      return resp;</span>
-<span class="source-line-no">3115</span><span id="line-3115">    } catch (IOException e) {</span>
-<span class="source-line-no">3116</span><span id="line-3116">      throw new ServiceException(e);</span>
-<span class="source-line-no">3117</span><span id="line-3117">    }</span>
-<span class="source-line-no">3118</span><span id="line-3118">  }</span>
-<span class="source-line-no">3119</span><span id="line-3119"></span>
-<span class="source-line-no">3120</span><span id="line-3120">  @Override</span>
-<span class="source-line-no">3121</span><span id="line-3121">  public GetRSGroupInfoOfServerResponse getRSGroupInfoOfServer(RpcController controller,</span>
-<span class="source-line-no">3122</span><span id="line-3122">    GetRSGroupInfoOfServerRequest request) throws ServiceException {</span>
-<span class="source-line-no">3123</span><span id="line-3123">    Address hp =</span>
-<span class="source-line-no">3124</span><span id="line-3124">      Address.fromParts(request.getServer().getHostName(), request.getServer().getPort());</span>
-<span class="source-line-no">3125</span><span id="line-3125">    LOG.info(server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, server=" + hp);</span>
-<span class="source-line-no">3126</span><span id="line-3126">    try {</span>
-<span class="source-line-no">3127</span><span id="line-3127">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3128</span><span id="line-3128">        server.getMasterCoprocessorHost().preGetRSGroupInfoOfServer(hp);</span>
-<span class="source-line-no">3129</span><span id="line-3129">      }</span>
-<span class="source-line-no">3130</span><span id="line-3130">      RSGroupInfo rsGroupInfo = server.getRSGroupInfoManager().getRSGroupOfServer(hp);</span>
-<span class="source-line-no">3131</span><span id="line-3131">      GetRSGroupInfoOfServerResponse resp;</span>
-<span class="source-line-no">3132</span><span id="line-3132">      if (rsGroupInfo != null) {</span>
-<span class="source-line-no">3133</span><span id="line-3133">        resp = GetRSGroupInfoOfServerResponse.newBuilder()</span>
-<span class="source-line-no">3134</span><span id="line-3134">          .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span>
-<span class="source-line-no">3135</span><span id="line-3135">      } else {</span>
-<span class="source-line-no">3136</span><span id="line-3136">        resp = GetRSGroupInfoOfServerResponse.getDefaultInstance();</span>
-<span class="source-line-no">3137</span><span id="line-3137">      }</span>
-<span class="source-line-no">3138</span><span id="line-3138">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3139</span><span id="line-3139">        server.getMasterCoprocessorHost().postGetRSGroupInfoOfServer(hp);</span>
-<span class="source-line-no">3140</span><span id="line-3140">      }</span>
-<span class="source-line-no">3141</span><span id="line-3141">      return resp;</span>
-<span class="source-line-no">3142</span><span id="line-3142">    } catch (IOException e) {</span>
-<span class="source-line-no">3143</span><span id="line-3143">      throw new ServiceException(e);</span>
-<span class="source-line-no">3144</span><span id="line-3144">    }</span>
-<span class="source-line-no">3145</span><span id="line-3145">  }</span>
-<span class="source-line-no">3146</span><span id="line-3146"></span>
-<span class="source-line-no">3147</span><span id="line-3147">  @Override</span>
-<span class="source-line-no">3148</span><span id="line-3148">  public MoveServersResponse moveServers(RpcController controller, MoveServersRequest request)</span>
-<span class="source-line-no">3149</span><span id="line-3149">    throws ServiceException {</span>
-<span class="source-line-no">3150</span><span id="line-3150">    Set&lt;Address&gt; hostPorts = Sets.newHashSet();</span>
-<span class="source-line-no">3151</span><span id="line-3151">    MoveServersResponse.Builder builder = MoveServersResponse.newBuilder();</span>
-<span class="source-line-no">3152</span><span id="line-3152">    for (HBaseProtos.ServerName el : request.getServersList()) {</span>
-<span class="source-line-no">3153</span><span id="line-3153">      hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));</span>
-<span class="source-line-no">3154</span><span id="line-3154">    }</span>
-<span class="source-line-no">3155</span><span id="line-3155">    LOG.info(server.getClientIdAuditPrefix() + " move servers " + hostPorts + " to rsgroup "</span>
-<span class="source-line-no">3156</span><span id="line-3156">      + request.getTargetGroup());</span>
-<span class="source-line-no">3157</span><span id="line-3157">    try {</span>
-<span class="source-line-no">3158</span><span id="line-3158">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3159</span><span id="line-3159">        server.getMasterCoprocessorHost().preMoveServers(hostPorts, request.getTargetGroup());</span>
-<span class="source-line-no">3160</span><span id="line-3160">      }</span>
-<span class="source-line-no">3161</span><span id="line-3161">      server.getRSGroupInfoManager().moveServers(hostPorts, request.getTargetGroup());</span>
-<span class="source-line-no">3162</span><span id="line-3162">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3163</span><span id="line-3163">        server.getMasterCoprocessorHost().postMoveServers(hostPorts, request.getTargetGroup());</span>
-<span class="source-line-no">3164</span><span id="line-3164">      }</span>
-<span class="source-line-no">3165</span><span id="line-3165">    } catch (IOException e) {</span>
-<span class="source-line-no">3166</span><span id="line-3166">      throw new ServiceException(e);</span>
-<span class="source-line-no">3167</span><span id="line-3167">    }</span>
-<span class="source-line-no">3168</span><span id="line-3168">    return builder.build();</span>
-<span class="source-line-no">3169</span><span id="line-3169">  }</span>
-<span class="source-line-no">3170</span><span id="line-3170"></span>
-<span class="source-line-no">3171</span><span id="line-3171">  @Override</span>
-<span class="source-line-no">3172</span><span id="line-3172">  public AddRSGroupResponse addRSGroup(RpcController controller, AddRSGroupRequest request)</span>
-<span class="source-line-no">3173</span><span id="line-3173">    throws ServiceException {</span>
-<span class="source-line-no">3174</span><span id="line-3174">    AddRSGroupResponse.Builder builder = AddRSGroupResponse.newBuilder();</span>
-<span class="source-line-no">3175</span><span id="line-3175">    LOG.info(server.getClientIdAuditPrefix() + " add rsgroup " + request.getRSGroupName());</span>
-<span class="source-line-no">3176</span><span id="line-3176">    try {</span>
-<span class="source-line-no">3177</span><span id="line-3177">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3178</span><span id="line-3178">        server.getMasterCoprocessorHost().preAddRSGroup(request.getRSGroupName());</span>
-<span class="source-line-no">3179</span><span id="line-3179">      }</span>
-<span class="source-line-no">3180</span><span id="line-3180">      server.getRSGroupInfoManager().addRSGroup(new RSGroupInfo(request.getRSGroupName()));</span>
-<span class="source-line-no">3181</span><span id="line-3181">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3182</span><span id="line-3182">        server.getMasterCoprocessorHost().postAddRSGroup(request.getRSGroupName());</span>
-<span class="source-line-no">3183</span><span id="line-3183">      }</span>
-<span class="source-line-no">3184</span><span id="line-3184">    } catch (IOException e) {</span>
-<span class="source-line-no">3185</span><span id="line-3185">      throw new ServiceException(e);</span>
-<span class="source-line-no">3186</span><span id="line-3186">    }</span>
-<span class="source-line-no">3187</span><span id="line-3187">    return builder.build();</span>
-<span class="source-line-no">3188</span><span id="line-3188">  }</span>
-<span class="source-line-no">3189</span><span id="line-3189"></span>
-<span class="source-line-no">3190</span><span id="line-3190">  @Override</span>
-<span class="source-line-no">3191</span><span id="line-3191">  public RemoveRSGroupResponse removeRSGroup(RpcController controller, RemoveRSGroupRequest request)</span>
-<span class="source-line-no">3192</span><span id="line-3192">    throws ServiceException {</span>
-<span class="source-line-no">3193</span><span id="line-3193">    RemoveRSGroupResponse.Builder builder = RemoveRSGroupResponse.newBuilder();</span>
-<span class="source-line-no">3194</span><span id="line-3194">    LOG.info(server.getClientIdAuditPrefix() + " remove rsgroup " + request.getRSGroupName());</span>
-<span class="source-line-no">3195</span><span id="line-3195">    try {</span>
-<span class="source-line-no">3196</span><span id="line-3196">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3197</span><span id="line-3197">        server.getMasterCoprocessorHost().preRemoveRSGroup(request.getRSGroupName());</span>
-<span class="source-line-no">3198</span><span id="line-3198">      }</span>
-<span class="source-line-no">3199</span><span id="line-3199">      server.getRSGroupInfoManager().removeRSGroup(request.getRSGroupName());</span>
-<span class="source-line-no">3200</span><span id="line-3200">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3201</span><span id="line-3201">        server.getMasterCoprocessorHost().postRemoveRSGroup(request.getRSGroupName());</span>
-<span class="source-line-no">3202</span><span id="line-3202">      }</span>
-<span class="source-line-no">3203</span><span id="line-3203">    } catch (IOException e) {</span>
-<span class="source-line-no">3204</span><span id="line-3204">      throw new ServiceException(e);</span>
-<span class="source-line-no">3205</span><span id="line-3205">    }</span>
-<span class="source-line-no">3206</span><span id="line-3206">    return builder.build();</span>
-<span class="source-line-no">3207</span><span id="line-3207">  }</span>
-<span class="source-line-no">3208</span><span id="line-3208"></span>
-<span class="source-line-no">3209</span><span id="line-3209">  @Override</span>
-<span class="source-line-no">3210</span><span id="line-3210">  public BalanceRSGroupResponse balanceRSGroup(RpcController controller,</span>
-<span class="source-line-no">3211</span><span id="line-3211">    BalanceRSGroupRequest request) throws ServiceException {</span>
-<span class="source-line-no">3212</span><span id="line-3212">    BalanceRequest balanceRequest = ProtobufUtil.toBalanceRequest(request);</span>
-<span class="source-line-no">3213</span><span id="line-3213"></span>
-<span class="source-line-no">3214</span><span id="line-3214">    BalanceRSGroupResponse.Builder builder =</span>
-<span class="source-line-no">3215</span><span id="line-3215">      BalanceRSGroupResponse.newBuilder().setBalanceRan(false);</span>
-<span class="source-line-no">3216</span><span id="line-3216"></span>
-<span class="source-line-no">3217</span><span id="line-3217">    LOG.info(</span>
-<span class="source-line-no">3218</span><span id="line-3218">      server.getClientIdAuditPrefix() + " balance rsgroup, group=" + request.getRSGroupName());</span>
-<span class="source-line-no">3219</span><span id="line-3219">    try {</span>
-<span class="source-line-no">3220</span><span id="line-3220">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3221</span><span id="line-3221">        server.getMasterCoprocessorHost().preBalanceRSGroup(request.getRSGroupName(),</span>
-<span class="source-line-no">3222</span><span id="line-3222">          balanceRequest);</span>
-<span class="source-line-no">3223</span><span id="line-3223">      }</span>
-<span class="source-line-no">3224</span><span id="line-3224">      BalanceResponse response =</span>
-<span class="source-line-no">3225</span><span id="line-3225">        server.getRSGroupInfoManager().balanceRSGroup(request.getRSGroupName(), balanceRequest);</span>
-<span class="source-line-no">3226</span><span id="line-3226">      ProtobufUtil.populateBalanceRSGroupResponse(builder, response);</span>
-<span class="source-line-no">3227</span><span id="line-3227">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3228</span><span id="line-3228">        server.getMasterCoprocessorHost().postBalanceRSGroup(request.getRSGroupName(),</span>
-<span class="source-line-no">3229</span><span id="line-3229">          balanceRequest, response);</span>
-<span class="source-line-no">3230</span><span id="line-3230">      }</span>
-<span class="source-line-no">3231</span><span id="line-3231">    } catch (IOException e) {</span>
-<span class="source-line-no">3232</span><span id="line-3232">      throw new ServiceException(e);</span>
-<span class="source-line-no">3233</span><span id="line-3233">    }</span>
-<span class="source-line-no">3234</span><span id="line-3234">    return builder.build();</span>
-<span class="source-line-no">3235</span><span id="line-3235">  }</span>
-<span class="source-line-no">3236</span><span id="line-3236"></span>
-<span class="source-line-no">3237</span><span id="line-3237">  @Override</span>
-<span class="source-line-no">3238</span><span id="line-3238">  public ListRSGroupInfosResponse listRSGroupInfos(RpcController controller,</span>
-<span class="source-line-no">3239</span><span id="line-3239">    ListRSGroupInfosRequest request) throws ServiceException {</span>
-<span class="source-line-no">3240</span><span id="line-3240">    ListRSGroupInfosResponse.Builder builder = ListRSGroupInfosResponse.newBuilder();</span>
-<span class="source-line-no">3241</span><span id="line-3241">    LOG.info(server.getClientIdAuditPrefix() + " list rsgroup");</span>
-<span class="source-line-no">3242</span><span id="line-3242">    try {</span>
-<span class="source-line-no">3243</span><span id="line-3243">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3244</span><span id="line-3244">        server.getMasterCoprocessorHost().preListRSGroups();</span>
-<span class="source-line-no">3245</span><span id="line-3245">      }</span>
-<span class="source-line-no">3246</span><span id="line-3246">      List&lt;RSGroupInfo&gt; rsGroupInfos = server.getRSGroupInfoManager().listRSGroups().stream()</span>
-<span class="source-line-no">3247</span><span id="line-3247">        .map(RSGroupInfo::new).collect(Collectors.toList());</span>
-<span class="source-line-no">3248</span><span id="line-3248">      Map&lt;String, RSGroupInfo&gt; name2Info = new HashMap&lt;&gt;();</span>
-<span class="source-line-no">3249</span><span id="line-3249">      List&lt;TableDescriptor&gt; needToFill =</span>
-<span class="source-line-no">3250</span><span id="line-3250">        new ArrayList&lt;&gt;(server.getTableDescriptors().getAll().values());</span>
-<span class="source-line-no">3251</span><span id="line-3251">      for (RSGroupInfo rsGroupInfo : rsGroupInfos) {</span>
-<span class="source-line-no">3252</span><span id="line-3252">        name2Info.put(rsGroupInfo.getName(), rsGroupInfo);</span>
-<span class="source-line-no">3253</span><span id="line-3253">        for (TableDescriptor td : server.getTableDescriptors().getAll().values()) {</span>
-<span class="source-line-no">3254</span><span id="line-3254">          if (rsGroupInfo.containsTable(td.getTableName())) {</span>
-<span class="source-line-no">3255</span><span id="line-3255">            needToFill.remove(td);</span>
-<span class="source-line-no">3256</span><span id="line-3256">          }</span>
-<span class="source-line-no">3257</span><span id="line-3257">        }</span>
-<span class="source-line-no">3258</span><span id="line-3258">      }</span>
-<span class="source-line-no">3259</span><span id="line-3259">      for (TableDescriptor td : needToFill) {</span>
-<span class="source-line-no">3260</span><span id="line-3260">        String groupName = td.getRegionServerGroup().orElse(RSGroupInfo.DEFAULT_GROUP);</span>
-<span class="source-line-no">3261</span><span id="line-3261">        RSGroupInfo rsGroupInfo = name2Info.get(groupName);</span>
-<span class="source-line-no">3262</span><span id="line-3262">        if (rsGroupInfo != null) {</span>
-<span class="source-line-no">3263</span><span id="line-3263">          rsGroupInfo.addTable(td.getTableName());</span>
-<span class="source-line-no">3264</span><span id="line-3264">        }</span>
-<span class="source-line-no">3265</span><span id="line-3265">      }</span>
-<span class="source-line-no">3266</span><span id="line-3266">      for (RSGroupInfo rsGroupInfo : rsGroupInfos) {</span>
-<span class="source-line-no">3267</span><span id="line-3267">        // TODO: this can be done at once outside this loop, do not need to scan all every time.</span>
-<span class="source-line-no">3268</span><span id="line-3268">        builder.addRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo));</span>
-<span class="source-line-no">3269</span><span id="line-3269">      }</span>
-<span class="source-line-no">3270</span><span id="line-3270">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3271</span><span id="line-3271">        server.getMasterCoprocessorHost().postListRSGroups();</span>
-<span class="source-line-no">3272</span><span id="line-3272">      }</span>
-<span class="source-line-no">3273</span><span id="line-3273">    } catch (IOException e) {</span>
-<span class="source-line-no">3274</span><span id="line-3274">      throw new ServiceException(e);</span>
-<span class="source-line-no">3275</span><span id="line-3275">    }</span>
-<span class="source-line-no">3276</span><span id="line-3276">    return builder.build();</span>
-<span class="source-line-no">3277</span><span id="line-3277">  }</span>
-<span class="source-line-no">3278</span><span id="line-3278"></span>
-<span class="source-line-no">3279</span><span id="line-3279">  @Override</span>
-<span class="source-line-no">3280</span><span id="line-3280">  public RemoveServersResponse removeServers(RpcController controller, RemoveServersRequest request)</span>
-<span class="source-line-no">3281</span><span id="line-3281">    throws ServiceException {</span>
-<span class="source-line-no">3282</span><span id="line-3282">    RemoveServersResponse.Builder builder = RemoveServersResponse.newBuilder();</span>
-<span class="source-line-no">3283</span><span id="line-3283">    Set&lt;Address&gt; servers = Sets.newHashSet();</span>
-<span class="source-line-no">3284</span><span id="line-3284">    for (HBaseProtos.ServerName el : request.getServersList()) {</span>
-<span class="source-line-no">3285</span><span id="line-3285">      servers.add(Address.fromParts(el.getHostName(), el.getPort()));</span>
-<span class="source-line-no">3286</span><span id="line-3286">    }</span>
-<span class="source-line-no">3287</span><span id="line-3287">    LOG.info(</span>
-<span class="source-line-no">3288</span><span id="line-3288">      server.getClientIdAuditPrefix() + " remove decommissioned servers from rsgroup: " + servers);</span>
-<span class="source-line-no">3289</span><span id="line-3289">    try {</span>
-<span class="source-line-no">3290</span><span id="line-3290">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3291</span><span id="line-3291">        server.getMasterCoprocessorHost().preRemoveServers(servers);</span>
-<span class="source-line-no">3292</span><span id="line-3292">      }</span>
-<span class="source-line-no">3293</span><span id="line-3293">      server.getRSGroupInfoManager().removeServers(servers);</span>
-<span class="source-line-no">3294</span><span id="line-3294">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3295</span><span id="line-3295">        server.getMasterCoprocessorHost().postRemoveServers(servers);</span>
-<span class="source-line-no">3296</span><span id="line-3296">      }</span>
-<span class="source-line-no">3297</span><span id="line-3297">    } catch (IOException e) {</span>
-<span class="source-line-no">3298</span><span id="line-3298">      throw new ServiceException(e);</span>
-<span class="source-line-no">3299</span><span id="line-3299">    }</span>
-<span class="source-line-no">3300</span><span id="line-3300">    return builder.build();</span>
-<span class="source-line-no">3301</span><span id="line-3301">  }</span>
-<span class="source-line-no">3302</span><span id="line-3302"></span>
-<span class="source-line-no">3303</span><span id="line-3303">  @Override</span>
-<span class="source-line-no">3304</span><span id="line-3304">  public ListTablesInRSGroupResponse listTablesInRSGroup(RpcController controller,</span>
-<span class="source-line-no">3305</span><span id="line-3305">    ListTablesInRSGroupRequest request) throws ServiceException {</span>
-<span class="source-line-no">3306</span><span id="line-3306">    ListTablesInRSGroupResponse.Builder builder = ListTablesInRSGroupResponse.newBuilder();</span>
-<span class="source-line-no">3307</span><span id="line-3307">    String groupName = request.getGroupName();</span>
-<span class="source-line-no">3308</span><span id="line-3308">    LOG.info(server.getClientIdAuditPrefix() + " list tables in rsgroup " + groupName);</span>
-<span class="source-line-no">3309</span><span id="line-3309">    try {</span>
-<span class="source-line-no">3310</span><span id="line-3310">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3311</span><span id="line-3311">        server.getMasterCoprocessorHost().preListTablesInRSGroup(groupName);</span>
-<span class="source-line-no">3312</span><span id="line-3312">      }</span>
-<span class="source-line-no">3313</span><span id="line-3313">      RSGroupUtil.listTablesInRSGroup(server, groupName).stream()</span>
-<span class="source-line-no">3314</span><span id="line-3314">        .map(ProtobufUtil::toProtoTableName).forEach(builder::addTableName);</span>
-<span class="source-line-no">3315</span><span id="line-3315">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3316</span><span id="line-3316">        server.getMasterCoprocessorHost().postListTablesInRSGroup(groupName);</span>
-<span class="source-line-no">3317</span><span id="line-3317">      }</span>
-<span class="source-line-no">3318</span><span id="line-3318">    } catch (IOException e) {</span>
-<span class="source-line-no">3319</span><span id="line-3319">      throw new ServiceException(e);</span>
-<span class="source-line-no">3320</span><span id="line-3320">    }</span>
-<span class="source-line-no">3321</span><span id="line-3321">    return builder.build();</span>
-<span class="source-line-no">3322</span><span id="line-3322">  }</span>
-<span class="source-line-no">3323</span><span id="line-3323"></span>
-<span class="source-line-no">3324</span><span id="line-3324">  @Override</span>
-<span class="source-line-no">3325</span><span id="line-3325">  public GetConfiguredNamespacesAndTablesInRSGroupResponse</span>
-<span class="source-line-no">3326</span><span id="line-3326">    getConfiguredNamespacesAndTablesInRSGroup(RpcController controller,</span>
-<span class="source-line-no">3327</span><span id="line-3327">      GetConfiguredNamespacesAndTablesInRSGroupRequest request) throws ServiceException {</span>
-<span class="source-line-no">3328</span><span id="line-3328">    GetConfiguredNamespacesAndTablesInRSGroupResponse.Builder builder =</span>
-<span class="source-line-no">3329</span><span id="line-3329">      GetConfiguredNamespacesAndTablesInRSGroupResponse.newBuilder();</span>
-<span class="source-line-no">3330</span><span id="line-3330">    String groupName = request.getGroupName();</span>
-<span class="source-line-no">3331</span><span id="line-3331">    LOG.info(server.getClientIdAuditPrefix() + " get configured namespaces and tables in rsgroup "</span>
-<span class="source-line-no">3332</span><span id="line-3332">      + groupName);</span>
-<span class="source-line-no">3333</span><span id="line-3333">    try {</span>
-<span class="source-line-no">3334</span><span id="line-3334">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3335</span><span id="line-3335">        server.getMasterCoprocessorHost().preGetConfiguredNamespacesAndTablesInRSGroup(groupName);</span>
-<span class="source-line-no">3336</span><span id="line-3336">      }</span>
-<span class="source-line-no">3337</span><span id="line-3337">      for (NamespaceDescriptor nd : server.getClusterSchema().getNamespaces()) {</span>
-<span class="source-line-no">3338</span><span id="line-3338">        if (groupName.equals(nd.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP))) {</span>
-<span class="source-line-no">3339</span><span id="line-3339">          builder.addNamespace(nd.getName());</span>
-<span class="source-line-no">3340</span><span id="line-3340">        }</span>
-<span class="source-line-no">3341</span><span id="line-3341">      }</span>
-<span class="source-line-no">3342</span><span id="line-3342">      for (TableDescriptor td : server.getTableDescriptors().getAll().values()) {</span>
-<span class="source-line-no">3343</span><span id="line-3343">        if (td.getRegionServerGroup().map(g -&gt; g.equals(groupName)).orElse(false)) {</span>
-<span class="source-line-no">3344</span><span id="line-3344">          builder.addTableName(ProtobufUtil.toProtoTableName(td.getTableName()));</span>
-<span class="source-line-no">3345</span><span id="line-3345">        }</span>
-<span class="source-line-no">3346</span><span id="line-3346">      }</span>
-<span class="source-line-no">3347</span><span id="line-3347">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3348</span><span id="line-3348">        server.getMasterCoprocessorHost().postGetConfiguredNamespacesAndTablesInRSGroup(groupName);</span>
-<span class="source-line-no">3349</span><span id="line-3349">      }</span>
-<span class="source-line-no">3350</span><span id="line-3350">    } catch (IOException e) {</span>
-<span class="source-line-no">3351</span><span id="line-3351">      throw new ServiceException(e);</span>
-<span class="source-line-no">3352</span><span id="line-3352">    }</span>
-<span class="source-line-no">3353</span><span id="line-3353">    return builder.build();</span>
-<span class="source-line-no">3354</span><span id="line-3354">  }</span>
-<span class="source-line-no">3355</span><span id="line-3355"></span>
-<span class="source-line-no">3356</span><span id="line-3356">  @Override</span>
-<span class="source-line-no">3357</span><span id="line-3357">  public RenameRSGroupResponse renameRSGroup(RpcController controller, RenameRSGroupRequest request)</span>
-<span class="source-line-no">3358</span><span id="line-3358">    throws ServiceException {</span>
-<span class="source-line-no">3359</span><span id="line-3359">    RenameRSGroupResponse.Builder builder = RenameRSGroupResponse.newBuilder();</span>
-<span class="source-line-no">3360</span><span id="line-3360">    String oldRSGroup = request.getOldRsgroupName();</span>
-<span class="source-line-no">3361</span><span id="line-3361">    String newRSGroup = request.getNewRsgroupName();</span>
-<span class="source-line-no">3362</span><span id="line-3362">    LOG.info("{} rename rsgroup from {} to {} ", server.getClientIdAuditPrefix(), oldRSGroup,</span>
-<span class="source-line-no">3363</span><span id="line-3363">      newRSGroup);</span>
-<span class="source-line-no">3364</span><span id="line-3364">    try {</span>
-<span class="source-line-no">3365</span><span id="line-3365">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3366</span><span id="line-3366">        server.getMasterCoprocessorHost().preRenameRSGroup(oldRSGroup, newRSGroup);</span>
-<span class="source-line-no">3367</span><span id="line-3367">      }</span>
-<span class="source-line-no">3368</span><span id="line-3368">      server.getRSGroupInfoManager().renameRSGroup(oldRSGroup, newRSGroup);</span>
-<span class="source-line-no">3369</span><span id="line-3369">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3370</span><span id="line-3370">        server.getMasterCoprocessorHost().postRenameRSGroup(oldRSGroup, newRSGroup);</span>
-<span class="source-line-no">3371</span><span id="line-3371">      }</span>
-<span class="source-line-no">3372</span><span id="line-3372">    } catch (IOException e) {</span>
-<span class="source-line-no">3373</span><span id="line-3373">      throw new ServiceException(e);</span>
-<span class="source-line-no">3374</span><span id="line-3374">    }</span>
-<span class="source-line-no">3375</span><span id="line-3375">    return builder.build();</span>
-<span class="source-line-no">3376</span><span id="line-3376">  }</span>
-<span class="source-line-no">3377</span><span id="line-3377"></span>
-<span class="source-line-no">3378</span><span id="line-3378">  @Override</span>
-<span class="source-line-no">3379</span><span id="line-3379">  public UpdateRSGroupConfigResponse updateRSGroupConfig(RpcController controller,</span>
-<span class="source-line-no">3380</span><span id="line-3380">    UpdateRSGroupConfigRequest request) throws ServiceException {</span>
-<span class="source-line-no">3381</span><span id="line-3381">    UpdateRSGroupConfigResponse.Builder builder = UpdateRSGroupConfigResponse.newBuilder();</span>
-<span class="source-line-no">3382</span><span id="line-3382">    String groupName = request.getGroupName();</span>
-<span class="source-line-no">3383</span><span id="line-3383">    Map&lt;String, String&gt; configuration = new HashMap&lt;&gt;();</span>
-<span class="source-line-no">3384</span><span id="line-3384">    request.getConfigurationList().forEach(p -&gt; configuration.put(p.getName(), p.getValue()));</span>
-<span class="source-line-no">3385</span><span id="line-3385">    LOG.info("{} update rsgroup {} configuration {}", server.getClientIdAuditPrefix(), groupName,</span>
-<span class="source-line-no">3386</span><span id="line-3386">      configuration);</span>
-<span class="source-line-no">3387</span><span id="line-3387">    try {</span>
-<span class="source-line-no">3388</span><span id="line-3388">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3389</span><span id="line-3389">        server.getMasterCoprocessorHost().preUpdateRSGroupConfig(groupName, configuration);</span>
-<span class="source-line-no">3390</span><span id="line-3390">      }</span>
-<span class="source-line-no">3391</span><span id="line-3391">      server.getRSGroupInfoManager().updateRSGroupConfig(groupName, configuration);</span>
-<span class="source-line-no">3392</span><span id="line-3392">      if (server.getMasterCoprocessorHost() != null) {</span>
-<span class="source-line-no">3393</span><span id="line-3393">        server.getMasterCoprocessorHost().postUpdateRSGroupConfig(groupName, configuration);</span>
-<span class="source-line-no">3394</span><span id="line-3394">      }</span>
-<span class="source-line-no">3395</span><span id="line-3395">    } catch (IOException e) {</span>
-<span class="source-line-no">3396</span><span id="line-3396">      throw new ServiceException(e);</span>
-<span class="source-line-no">3397</span><span id="line-3397">    }</span>
-<span class="source-line-no">3398</span><span id="line-3398">    return builder.build();</span>
-<span class="source-line-no">3399</span><span id="line-3399">  }</span>
-<span class="source-line-no">3400</span><span id="line-3400"></span>
-<span class="source-line-no">3401</span><span id="line-3401">  @Override</span>
-<span class="source-line-no">3402</span><span id="line-3402">  public HBaseProtos.LogEntry getLogEntries(RpcController controller,</span>
-<span class="source-line-no">3403</span><span id="line-3403">    HBaseProtos.LogRequest request) throws ServiceException {</span>
-<span class="source-line-no">3404</span><span id="line-3404">    try {</span>
-<span class="source-line-no">3405</span><span id="line-3405">      final String logClassName = request.getLogClassName();</span>
-<span class="source-line-no">3406</span><span id="line-3406">      Class&lt;?&gt; logClass = Class.forName(logClassName).asSubclass(Message.class);</span>
-<span class="source-line-no">3407</span><span id="line-3407">      Method method = logClass.getMethod("parseFrom", ByteString.class);</span>
-<span class="source-line-no">3408</span><span id="line-3408">      if (logClassName.contains("BalancerDecisionsRequest")) {</span>
-<span class="source-line-no">3409</span><span id="line-3409">        MasterProtos.BalancerDecisionsRequest balancerDecisionsRequest =</span>
-<span class="source-line-no">3410</span><span id="line-3410">          (MasterProtos.BalancerDecisionsRequest) method.invoke(null, request.getLogMessage());</span>
-<span class="source-line-no">3411</span><span id="line-3411">        MasterProtos.BalancerDecisionsResponse balancerDecisionsResponse =</span>
-<span class="source-line-no">3412</span><span id="line-3412">          getBalancerDecisions(balancerDecisionsRequest);</span>
-<span class="source-line-no">3413</span><span id="line-3413">        return HBaseProtos.LogEntry.newBuilder()</span>
-<span class="source-line-no">3414</span><span id="line-3414">          .setLogClassName(balancerDecisionsResponse.getClass().getName())</span>
-<span class="source-line-no">3415</span><span id="line-3415">          .setLogMessage(balancerDecisionsResponse.toByteString()).build();</span>
-<span class="source-line-no">3416</span><span id="line-3416">      } else if (logClassName.contains("BalancerRejectionsRequest")) {</span>
-<span class="source-line-no">3417</span><span id="line-3417">        MasterProtos.BalancerRejectionsRequest balancerRejectionsRequest =</span>
-<span class="source-line-no">3418</span><span id="line-3418">          (MasterProtos.BalancerRejectionsRequest) method.invoke(null, request.getLogMessage());</span>
-<span class="source-line-no">3419</span><span id="line-3419">        MasterProtos.BalancerRejectionsResponse balancerRejectionsResponse =</span>
-<span class="source-line-no">3420</span><span id="line-3420">          getBalancerRejections(balancerRejectionsRequest);</span>
-<span class="source-line-no">3421</span><span id="line-3421">        return HBaseProtos.LogEntry.newBuilder()</span>
-<span class="source-line-no">3422</span><span id="line-3422">          .setLogClassName(balancerRejectionsResponse.getClass().getName())</span>
-<span class="source-line-no">3423</span><span id="line-3423">          .setLogMessage(balancerRejectionsResponse.toByteString()).build();</span>
-<span class="source-line-no">3424</span><span id="line-3424">      }</span>
-<span class="source-line-no">3425</span><span id="line-3425">    } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException</span>
-<span class="source-line-no">3426</span><span id="line-3426">      | InvocationTargetException e) {</span>
-<span class="source-line-no">3427</span><span id="line-3427">      LOG.error("Error while retrieving log entries.", e);</span>
-<span class="source-line-no">3428</span><span id="line-3428">      throw new ServiceException(e);</span>
-<span class="source-line-no">3429</span><span id="line-3429">    }</span>
-<span class="source-line-no">3430</span><span id="line-3430">    throw new ServiceException("Invalid request params");</span>
-<span class="source-line-no">3431</span><span id="line-3431">  }</span>
-<span class="source-line-no">3432</span><span id="line-3432"></span>
-<span class="source-line-no">3433</span><span id="line-3433">  private MasterProtos.BalancerDecisionsResponse</span>
-<span class="source-line-no">3434</span><span id="line-3434">    getBalancerDecisions(MasterProtos.BalancerDecisionsRequest request) {</span>
-<span class="source-line-no">3435</span><span id="line-3435">    final NamedQueueRecorder namedQueueRecorder = this.server.getNamedQueueRecorder();</span>
-<span class="source-line-no">3436</span><span id="line-3436">    if (namedQueueRecorder == null) {</span>
-<span class="source-line-no">3437</span><span id="line-3437">      return MasterProtos.BalancerDecisionsResponse.newBuilder()</span>
-<span class="source-line-no">3438</span><span id="line-3438">        .addAllBalancerDecision(Collections.emptyList()).build();</span>
-<span class="source-line-no">3439</span><span id="line-3439">    }</span>
-<span class="source-line-no">3440</span><span id="line-3440">    final NamedQueueGetRequest namedQueueGetRequest = new NamedQueueGetRequest();</span>
-<span class="source-line-no">3441</span><span id="line-3441">    namedQueueGetRequest.setNamedQueueEvent(BalancerDecisionDetails.BALANCER_DECISION_EVENT);</span>
-<span class="source-line-no">3442</span><span id="line-3442">    namedQueueGetRequest.setBalancerDecisionsRequest(request);</span>
-<span class="source-line-no">3443</span><span id="line-3443">    NamedQueueGetResponse namedQueueGetResponse =</span>
-<span class="source-line-no">3444</span><span id="line-3444">      namedQueueRecorder.getNamedQueueRecords(namedQueueGetRequest);</span>
-<span class="source-line-no">3445</span><span id="line-3445">    List&lt;RecentLogs.BalancerDecision&gt; balancerDecisions = namedQueueGetResponse != null</span>
-<span class="source-line-no">3446</span><span id="line-3446">      ? namedQueueGetResponse.getBalancerDecisions()</span>
-<span class="source-line-no">3447</span><span id="line-3447">      : Collections.emptyList();</span>
-<span class="source-line-no">3448</span><span id="line-3448">    return MasterProtos.BalancerDecisionsResponse.newBuilder()</span>
-<span class="source-line-no">3449</span><span id="line-3449">      .addAllBalancerDecision(balancerDecisions).build();</span>
-<span class="source-line-no">3450</span><span id="line-3450">  }</span>
-<span class="source-line-no">3451</span><span id="line-3451"></span>
-<span class="source-line-no">3452</span><span id="line-3452">  private MasterProtos.BalancerRejectionsResponse</span>
-<span class="source-line-no">3453</span><span id="line-3453">    getBalancerRejections(MasterProtos.BalancerRejectionsRequest request) {</span>
-<span class="source-line-no">3454</span><span id="line-3454">    final NamedQueueRecorder namedQueueRecorder = this.server.getNamedQueueRecorder();</span>
-<span class="source-line-no">3455</span><span id="line-3455">    if (namedQueueRecorder == null) {</span>
-<span class="source-line-no">3456</span><span id="line-3456">      return MasterProtos.BalancerRejectionsResponse.newBuilder()</span>
-<span class="source-line-no">3457</span><span id="line-3457">        .addAllBalancerRejection(Collections.emptyList()).build();</span>
-<span class="source-line-no">3458</span><span id="line-3458">    }</span>
-<span class="source-line-no">3459</span><span id="line-3459">    final NamedQueueGetRequest namedQueueGetRequest = new NamedQueueGetRequest();</span>
-<span class="source-line-no">3460</span><span id="line-3460">    namedQueueGetRequest.setNamedQueueEvent(BalancerRejectionDetails.BALANCER_REJECTION_EVENT);</span>
-<span class="source-line-no">3461</span><span id="line-3461">    namedQueueGetRequest.setBalancerRejectionsRequest(request);</span>
-<span class="source-line-no">3462</span><span id="line-3462">    NamedQueueGetResponse namedQueueGetResponse =</span>
-<span class="source-line-no">3463</span><span id="line-3463">      namedQueueRecorder.getNamedQueueRecords(namedQueueGetRequest);</span>
-<span class="source-line-no">3464</span><span id="line-3464">    List&lt;RecentLogs.BalancerRejection&gt; balancerRejections = namedQueueGetResponse != null</span>
-<span class="source-line-no">3465</span><span id="line-3465">      ? namedQueueGetResponse.getBalancerRejections()</span>
-<span class="source-line-no">3466</span><span id="line-3466">      : Collections.emptyList();</span>
-<span class="source-line-no">3467</span><span id="line-3467">    return MasterProtos.BalancerRejectionsResponse.newBuilder()</span>
-<span class="source-line-no">3468</span><span id="line-3468">      .addAllBalancerRejection(balancerRejections).build();</span>
-<span class="source-line-no">3469</span><span id="line-3469">  }</span>
-<span class="source-line-no">3470</span><span id="line-3470"></span>
-<span class="source-line-no">3471</span><span id="line-3471">  @Override</span>
-<span class="source-line-no">3472</span><span id="line-3472">  @QosPriority(priority = HConstants.ADMIN_QOS)</span>
-<span class="source-line-no">3473</span><span id="line-3473">  public GetRegionInfoResponse getRegionInfo(final RpcController controller,</span>
-<span class="source-line-no">3474</span><span id="line-3474">    final GetRegionInfoRequest request) throws ServiceException {</span>
-<span class="source-line-no">3475</span><span id="line-3475">    final GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();</span>
-<span class="source-line-no">3476</span><span id="line-3476">    final RegionInfo info = getRegionInfo(request.getRegion());</span>
-<span class="source-line-no">3477</span><span id="line-3477">    if (info != null) {</span>
-<span class="source-line-no">3478</span><span id="line-3478">      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));</span>
-<span class="source-line-no">3479</span><span id="line-3479">    } else {</span>
-<span class="source-line-no">3480</span><span id="line-3480">      // Is it a MOB name? These work differently.</span>
-<span class="source-line-no">3481</span><span id="line-3481">      byte[] regionName = request.getRegion().getValue().toByteArray();</span>
-<span class="source-line-no">3482</span><span id="line-3482">      TableName tableName = RegionInfo.getTable(regionName);</span>
-<span class="source-line-no">3483</span><span id="line-3483">      if (MobUtils.isMobRegionName(tableName, regionName)) {</span>
-<span class="source-line-no">3484</span><span id="line-3484">        // a dummy region info contains the compaction state.</span>
-<span class="source-line-no">3485</span><span id="line-3485">        RegionInfo mobRegionInfo = MobUtils.getMobRegionInfo(tableName);</span>
-<span class="source-line-no">3486</span><span id="line-3486">        builder.setRegionInfo(ProtobufUtil.toRegionInfo(mobRegionInfo));</span>
-<span class="source-line-no">3487</span><span id="line-3487">        if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {</span>
-<span class="source-line-no">3488</span><span id="line-3488">          builder.setCompactionState(server.getMobCompactionState(tableName));</span>
-<span class="source-line-no">3489</span><span id="line-3489">        }</span>
-<span class="source-line-no">3490</span><span id="line-3490">      } else {</span>
-<span class="source-line-no">3491</span><span id="line-3491">        // If unknown RegionInfo and not a MOB region, it is unknown.</span>
-<span class="source-line-no">3492</span><span id="line-3492">        throw new ServiceException(new UnknownRegionException(Bytes.toString(regionName)));</span>
-<span class="source-line-no">3493</span><span id="line-3493">      }</span>
-<span class="source-line-no">3494</span><span id="line-3494">    }</span>
-<span class="source-line-no">3495</span><span id="line-3495">    return builder.build();</span>
-<span class="source-line-no">3496</span><span id="line-3496">  }</span>
-<span class="source-line-no">3497</span><span id="line-3497"></span>
-<span class="source-line-no">3498</span><span id="line-3498">  @Override</span>
-<span class="source-line-no">3499</span><span id="line-3499">  public GetStoreFileResponse getStoreFile(RpcController controller, GetStoreFileRequest request)</span>
-<span class="source-line-no">3500</span><span id="line-3500">    throws ServiceException {</span>
-<span class="source-line-no">3501</span><span id="line-3501">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3502</span><span id="line-3502">  }</span>
-<span class="source-line-no">3503</span><span id="line-3503"></span>
-<span class="source-line-no">3504</span><span id="line-3504">  @Override</span>
-<span class="source-line-no">3505</span><span id="line-3505">  public GetOnlineRegionResponse getOnlineRegion(RpcController controller,</span>
-<span class="source-line-no">3506</span><span id="line-3506">    GetOnlineRegionRequest request) throws ServiceException {</span>
-<span class="source-line-no">3507</span><span id="line-3507">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3508</span><span id="line-3508">  }</span>
-<span class="source-line-no">3509</span><span id="line-3509"></span>
-<span class="source-line-no">3510</span><span id="line-3510">  @Override</span>
-<span class="source-line-no">3511</span><span id="line-3511">  public OpenRegionResponse openRegion(RpcController controller, OpenRegionRequest request)</span>
-<span class="source-line-no">3512</span><span id="line-3512">    throws ServiceException {</span>
-<span class="source-line-no">3513</span><span id="line-3513">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3514</span><span id="line-3514">  }</span>
-<span class="source-line-no">3515</span><span id="line-3515"></span>
-<span class="source-line-no">3516</span><span id="line-3516">  @Override</span>
-<span class="source-line-no">3517</span><span id="line-3517">  public WarmupRegionResponse warmupRegion(RpcController controller, WarmupRegionRequest request)</span>
-<span class="source-line-no">3518</span><span id="line-3518">    throws ServiceException {</span>
-<span class="source-line-no">3519</span><span id="line-3519">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3520</span><span id="line-3520">  }</span>
-<span class="source-line-no">3521</span><span id="line-3521"></span>
-<span class="source-line-no">3522</span><span id="line-3522">  @Override</span>
-<span class="source-line-no">3523</span><span id="line-3523">  public CloseRegionResponse closeRegion(RpcController controller, CloseRegionRequest request)</span>
-<span class="source-line-no">3524</span><span id="line-3524">    throws ServiceException {</span>
-<span class="source-line-no">3525</span><span id="line-3525">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3526</span><span id="line-3526">  }</span>
-<span class="source-line-no">3527</span><span id="line-3527"></span>
-<span class="source-line-no">3528</span><span id="line-3528">  @Override</span>
-<span class="source-line-no">3529</span><span id="line-3529">  public FlushRegionResponse flushRegion(RpcController controller, FlushRegionRequest request)</span>
-<span class="source-line-no">3530</span><span id="line-3530">    throws ServiceException {</span>
-<span class="source-line-no">3531</span><span id="line-3531">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3532</span><span id="line-3532">  }</span>
-<span class="source-line-no">3533</span><span id="line-3533"></span>
-<span class="source-line-no">3534</span><span id="line-3534">  @Override</span>
-<span class="source-line-no">3535</span><span id="line-3535">  public CompactionSwitchResponse compactionSwitch(RpcController controller,</span>
-<span class="source-line-no">3536</span><span id="line-3536">    CompactionSwitchRequest request) throws ServiceException {</span>
-<span class="source-line-no">3537</span><span id="line-3537">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3538</span><span id="line-3538">  }</span>
-<span class="source-line-no">3539</span><span id="line-3539"></span>
-<span class="source-line-no">3540</span><span id="line-3540">  @Override</span>
-<span class="source-line-no">3541</span><span id="line-3541">  public CompactRegionResponse compactRegion(RpcController controller, CompactRegionRequest request)</span>
-<span class="source-line-no">3542</span><span id="line-3542">    throws ServiceException {</span>
-<span class="source-line-no">3543</span><span id="line-3543">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3544</span><span id="line-3544">  }</span>
-<span class="source-line-no">3545</span><span id="line-3545"></span>
-<span class="source-line-no">3546</span><span id="line-3546">  @Override</span>
-<span class="source-line-no">3547</span><span id="line-3547">  public ReplicateWALEntryResponse replicateWALEntry(RpcController controller,</span>
-<span class="source-line-no">3548</span><span id="line-3548">    ReplicateWALEntryRequest request) throws ServiceException {</span>
-<span class="source-line-no">3549</span><span id="line-3549">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3550</span><span id="line-3550">  }</span>
-<span class="source-line-no">3551</span><span id="line-3551"></span>
-<span class="source-line-no">3552</span><span id="line-3552">  @Override</span>
-<span class="source-line-no">3553</span><span id="line-3553">  public ReplicateWALEntryResponse replay(RpcController controller,</span>
-<span class="source-line-no">3554</span><span id="line-3554">    ReplicateWALEntryRequest request) throws ServiceException {</span>
-<span class="source-line-no">3555</span><span id="line-3555">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3556</span><span id="line-3556">  }</span>
-<span class="source-line-no">3557</span><span id="line-3557"></span>
-<span class="source-line-no">3558</span><span id="line-3558">  @Override</span>
-<span class="source-line-no">3559</span><span id="line-3559">  public RollWALWriterResponse rollWALWriter(RpcController controller, RollWALWriterRequest request)</span>
-<span class="source-line-no">3560</span><span id="line-3560">    throws ServiceException {</span>
-<span class="source-line-no">3561</span><span id="line-3561">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3562</span><span id="line-3562">  }</span>
-<span class="source-line-no">3563</span><span id="line-3563"></span>
-<span class="source-line-no">3564</span><span id="line-3564">  @Override</span>
-<span class="source-line-no">3565</span><span id="line-3565">  public GetServerInfoResponse getServerInfo(RpcController controller, GetServerInfoRequest request)</span>
-<span class="source-line-no">3566</span><span id="line-3566">    throws ServiceException {</span>
-<span class="source-line-no">3567</span><span id="line-3567">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3568</span><span id="line-3568">  }</span>
-<span class="source-line-no">3569</span><span id="line-3569"></span>
-<span class="source-line-no">3570</span><span id="line-3570">  @Override</span>
-<span class="source-line-no">3571</span><span id="line-3571">  public StopServerResponse stopServer(RpcController controller, StopServerRequest request)</span>
-<span class="source-line-no">3572</span><span id="line-3572">    throws ServiceException {</span>
-<span class="source-line-no">3573</span><span id="line-3573">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3574</span><span id="line-3574">  }</span>
-<span class="source-line-no">3575</span><span id="line-3575"></span>
-<span class="source-line-no">3576</span><span id="line-3576">  @Override</span>
-<span class="source-line-no">3577</span><span id="line-3577">  public UpdateFavoredNodesResponse updateFavoredNodes(RpcController controller,</span>
-<span class="source-line-no">3578</span><span id="line-3578">    UpdateFavoredNodesRequest request) throws ServiceException {</span>
-<span class="source-line-no">3579</span><span id="line-3579">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3580</span><span id="line-3580">  }</span>
-<span class="source-line-no">3581</span><span id="line-3581"></span>
-<span class="source-line-no">3582</span><span id="line-3582">  @Override</span>
-<span class="source-line-no">3583</span><span id="line-3583">  public GetRegionLoadResponse getRegionLoad(RpcController controller, GetRegionLoadRequest request)</span>
-<span class="source-line-no">3584</span><span id="line-3584">    throws ServiceException {</span>
-<span class="source-line-no">3585</span><span id="line-3585">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3586</span><span id="line-3586">  }</span>
-<span class="source-line-no">3587</span><span id="line-3587"></span>
-<span class="source-line-no">3588</span><span id="line-3588">  @Override</span>
-<span class="source-line-no">3589</span><span id="line-3589">  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,</span>
-<span class="source-line-no">3590</span><span id="line-3590">    ClearCompactionQueuesRequest request) throws ServiceException {</span>
-<span class="source-line-no">3591</span><span id="line-3591">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3592</span><span id="line-3592">  }</span>
-<span class="source-line-no">3593</span><span id="line-3593"></span>
-<span class="source-line-no">3594</span><span id="line-3594">  @Override</span>
-<span class="source-line-no">3595</span><span id="line-3595">  public ClearRegionBlockCacheResponse clearRegionBlockCache(RpcController controller,</span>
-<span class="source-line-no">3596</span><span id="line-3596">    ClearRegionBlockCacheRequest request) throws ServiceException {</span>
-<span class="source-line-no">3597</span><span id="line-3597">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3598</span><span id="line-3598">  }</span>
-<span class="source-line-no">3599</span><span id="line-3599"></span>
-<span class="source-line-no">3600</span><span id="line-3600">  @Override</span>
-<span class="source-line-no">3601</span><span id="line-3601">  public GetSpaceQuotaSnapshotsResponse getSpaceQuotaSnapshots(RpcController controller,</span>
-<span class="source-line-no">3602</span><span id="line-3602">    GetSpaceQuotaSnapshotsRequest request) throws ServiceException {</span>
-<span class="source-line-no">3603</span><span id="line-3603">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3604</span><span id="line-3604">  }</span>
-<span class="source-line-no">3605</span><span id="line-3605"></span>
-<span class="source-line-no">3606</span><span id="line-3606">  @Override</span>
-<span class="source-line-no">3607</span><span id="line-3607">  public ExecuteProceduresResponse executeProcedures(RpcController controller,</span>
-<span class="source-line-no">3608</span><span id="line-3608">    ExecuteProceduresRequest request) throws ServiceException {</span>
-<span class="source-line-no">3609</span><span id="line-3609">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3610</span><span id="line-3610">  }</span>
-<span class="source-line-no">3611</span><span id="line-3611"></span>
-<span class="source-line-no">3612</span><span id="line-3612">  @Override</span>
-<span class="source-line-no">3613</span><span id="line-3613">  public GetCachedFilesListResponse getCachedFilesList(RpcController controller,</span>
-<span class="source-line-no">3614</span><span id="line-3614">    GetCachedFilesListRequest request) throws ServiceException {</span>
-<span class="source-line-no">3615</span><span id="line-3615">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3616</span><span id="line-3616">  }</span>
-<span class="source-line-no">3617</span><span id="line-3617"></span>
-<span class="source-line-no">3618</span><span id="line-3618">  @Override</span>
-<span class="source-line-no">3619</span><span id="line-3619">  public GetLiveRegionServersResponse getLiveRegionServers(RpcController controller,</span>
-<span class="source-line-no">3620</span><span id="line-3620">    GetLiveRegionServersRequest request) throws ServiceException {</span>
-<span class="source-line-no">3621</span><span id="line-3621">    List&lt;ServerName&gt; regionServers = new ArrayList&lt;&gt;(server.getLiveRegionServers());</span>
-<span class="source-line-no">3622</span><span id="line-3622">    Collections.shuffle(regionServers, ThreadLocalRandom.current());</span>
-<span class="source-line-no">3623</span><span id="line-3623">    GetLiveRegionServersResponse.Builder builder =</span>
-<span class="source-line-no">3624</span><span id="line-3624">      GetLiveRegionServersResponse.newBuilder().setTotal(regionServers.size());</span>
-<span class="source-line-no">3625</span><span id="line-3625">    regionServers.stream().limit(request.getCount()).map(ProtobufUtil::toServerName)</span>
-<span class="source-line-no">3626</span><span id="line-3626">      .forEach(builder::addServer);</span>
-<span class="source-line-no">3627</span><span id="line-3627">    return builder.build();</span>
-<span class="source-line-no">3628</span><span id="line-3628">  }</span>
-<span class="source-line-no">3629</span><span id="line-3629"></span>
-<span class="source-line-no">3630</span><span id="line-3630">  @Override</span>
-<span class="source-line-no">3631</span><span id="line-3631">  public ReplicateWALEntryResponse replicateToReplica(RpcController controller,</span>
-<span class="source-line-no">3632</span><span id="line-3632">    ReplicateWALEntryRequest request) throws ServiceException {</span>
-<span class="source-line-no">3633</span><span id="line-3633">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
-<span class="source-line-no">3634</span><span id="line-3634">  }</span>
-<span class="source-line-no">3635</span><span id="line-3635"></span>
-<span class="source-line-no">3636</span><span id="line-3636">  @Override</span>
-<span class="source-line-no">3637</span><span id="line-3637">  public FlushMasterStoreResponse flushMasterStore(RpcController controller,</span>
-<span class="source-line-no">3638</span><span id="line-3638">    FlushMasterStoreRequest request) throws ServiceException {</span>
-<span class="source-line-no">3639</span><span id="line-3639">    rpcPreCheck("flushMasterStore");</span>
-<span class="source-line-no">3640</span><span id="line-3640">    try {</span>
-<span class="source-line-no">3641</span><span id="line-3641">      server.flushMasterStore();</span>
-<span class="source-line-no">3642</span><span id="line-3642">    } catch (IOException ioe) {</span>
-<span class="source-line-no">3643</span><span id="line-3643">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">3644</span><span id="line-3644">    }</span>
-<span class="source-line-no">3645</span><span id="line-3645">    return FlushMasterStoreResponse.newBuilder().build();</span>
-<span class="source-line-no">3646</span><span id="line-3646">  }</span>
-<span class="source-line-no">3647</span><span id="line-3647"></span>
-<span class="source-line-no">3648</span><span id="line-3648">  @Override</span>
-<span class="source-line-no">3649</span><span id="line-3649">  public FlushTableResponse flushTable(RpcController controller, FlushTableRequest req)</span>
-<span class="source-line-no">3650</span><span id="line-3650">    throws ServiceException {</span>
-<span class="source-line-no">3651</span><span id="line-3651">    TableName tableName = ProtobufUtil.toTableName(req.getTableName());</span>
-<span class="source-line-no">3652</span><span id="line-3652">    List&lt;byte[]&gt; columnFamilies = req.getColumnFamilyCount() &gt; 0</span>
-<span class="source-line-no">3653</span><span id="line-3653">      ? req.getColumnFamilyList().stream().filter(cf -&gt; !cf.isEmpty()).map(ByteString::toByteArray)</span>
-<span class="source-line-no">3654</span><span id="line-3654">        .collect(Collectors.toList())</span>
-<span class="source-line-no">3655</span><span id="line-3655">      : null;</span>
-<span class="source-line-no">3656</span><span id="line-3656">    try {</span>
-<span class="source-line-no">3657</span><span id="line-3657">      long procId =</span>
-<span class="source-line-no">3658</span><span id="line-3658">        server.flushTable(tableName, columnFamilies, req.getNonceGroup(), req.getNonce());</span>
-<span class="source-line-no">3659</span><span id="line-3659">      return FlushTableResponse.newBuilder().setProcId(procId).build();</span>
-<span class="source-line-no">3660</span><span id="line-3660">    } catch (IOException ioe) {</span>
-<span class="source-line-no">3661</span><span id="line-3661">      throw new ServiceException(ioe);</span>
-<span class="source-line-no">3662</span><span id="line-3662">    }</span>
-<span class="source-line-no">3663</span><span id="line-3663">  }</span>
-<span class="source-line-no">3664</span><span id="line-3664">}</span>
+<span class="source-line-no">2614</span><span id="line-2614">  @Override</span>
+<span class="source-line-no">2615</span><span id="line-2615">  public RunHbckChoreResponse runHbckChore(RpcController c, RunHbckChoreRequest req)</span>
+<span class="source-line-no">2616</span><span id="line-2616">    throws ServiceException {</span>
+<span class="source-line-no">2617</span><span id="line-2617">    rpcPreCheck("runHbckChore");</span>
+<span class="source-line-no">2618</span><span id="line-2618">    LOG.info("{} request HBCK chore to run", server.getClientIdAuditPrefix());</span>
+<span class="source-line-no">2619</span><span id="line-2619">    HbckChore hbckChore = server.getHbckChore();</span>
+<span class="source-line-no">2620</span><span id="line-2620">    boolean ran = hbckChore.runChore();</span>
+<span class="source-line-no">2621</span><span id="line-2621">    return RunHbckChoreResponse.newBuilder().setRan(ran).build();</span>
+<span class="source-line-no">2622</span><span id="line-2622">  }</span>
+<span class="source-line-no">2623</span><span id="line-2623"></span>
+<span class="source-line-no">2624</span><span id="line-2624">  /**</span>
+<span class="source-line-no">2625</span><span id="line-2625">   * Update state of the table in meta only. This is required by hbck in some situations to cleanup</span>
+<span class="source-line-no">2626</span><span id="line-2626">   * stuck assign/ unassign regions procedures for the table.</span>
+<span class="source-line-no">2627</span><span id="line-2627">   * @return previous state of the table</span>
+<span class="source-line-no">2628</span><span id="line-2628">   */</span>
+<span class="source-line-no">2629</span><span id="line-2629">  @Override</span>
+<span class="source-line-no">2630</span><span id="line-2630">  public GetTableStateResponse setTableStateInMeta(RpcController controller,</span>
+<span class="source-line-no">2631</span><span id="line-2631">    SetTableStateInMetaRequest request) throws ServiceException {</span>
+<span class="source-line-no">2632</span><span id="line-2632">    rpcPreCheck("setTableStateInMeta");</span>
+<span class="source-line-no">2633</span><span id="line-2633">    TableName tn = ProtobufUtil.toTableName(request.getTableName());</span>
+<span class="source-line-no">2634</span><span id="line-2634">    try {</span>
+<span class="source-line-no">2635</span><span id="line-2635">      TableState prevState = this.server.getTableStateManager().getTableState(tn);</span>
+<span class="source-line-no">2636</span><span id="line-2636">      TableState newState = TableState.convert(tn, request.getTableState());</span>
+<span class="source-line-no">2637</span><span id="line-2637">      LOG.info("{} set table={} state from {} to {}", server.getClientIdAuditPrefix(), tn,</span>
+<span class="source-line-no">2638</span><span id="line-2638">        prevState.getState(), newState.getState());</span>
+<span class="source-line-no">2639</span><span id="line-2639">      this.server.getTableStateManager().setTableState(tn, newState.getState());</span>
+<span class="source-line-no">2640</span><span id="line-2640">      return GetTableStateResponse.newBuilder().setTableState(prevState.convert()).build();</span>
+<span class="source-line-no">2641</span><span id="line-2641">    } catch (Exception e) {</span>
+<span class="source-line-no">2642</span><span id="line-2642">      throw new ServiceException(e);</span>
+<span class="source-line-no">2643</span><span id="line-2643">    }</span>
+<span class="source-line-no">2644</span><span id="line-2644">  }</span>
+<span class="source-line-no">2645</span><span id="line-2645"></span>
+<span class="source-line-no">2646</span><span id="line-2646">  /**</span>
+<span class="source-line-no">2647</span><span id="line-2647">   * Update state of the region in meta only. This is required by hbck in some situations to cleanup</span>
+<span class="source-line-no">2648</span><span id="line-2648">   * stuck assign/ unassign regions procedures for the table.</span>
+<span class="source-line-no">2649</span><span id="line-2649">   * @return previous states of the regions</span>
+<span class="source-line-no">2650</span><span id="line-2650">   */</span>
+<span class="source-line-no">2651</span><span id="line-2651">  @Override</span>
+<span class="source-line-no">2652</span><span id="line-2652">  public SetRegionStateInMetaResponse setRegionStateInMeta(RpcController controller,</span>
+<span class="source-line-no">2653</span><span id="line-2653">    SetRegionStateInMetaRequest request) throws ServiceException {</span>
+<span class="source-line-no">2654</span><span id="line-2654">    rpcPreCheck("setRegionStateInMeta");</span>
+<span class="source-line-no">2655</span><span id="line-2655">    SetRegionStateInMetaResponse.Builder builder = SetRegionStateInMetaResponse.newBuilder();</span>
+<span class="source-line-no">2656</span><span id="line-2656">    final AssignmentManager am = server.getAssignmentManager();</span>
+<span class="source-line-no">2657</span><span id="line-2657">    try {</span>
+<span class="source-line-no">2658</span><span id="line-2658">      for (RegionSpecifierAndState s : request.getStatesList()) {</span>
+<span class="source-line-no">2659</span><span id="line-2659">        final RegionSpecifier spec = s.getRegionSpecifier();</span>
+<span class="source-line-no">2660</span><span id="line-2660">        final RegionInfo targetRegionInfo = getRegionInfo(spec);</span>
+<span class="source-line-no">2661</span><span id="line-2661">        final RegionState.State targetState = RegionState.State.convert(s.getState());</span>
+<span class="source-line-no">2662</span><span id="line-2662">        final RegionState.State currentState = Optional.ofNullable(targetRegionInfo)</span>
+<span class="source-line-no">2663</span><span id="line-2663">          .map(info -&gt; am.getRegionStates().getRegionState(info)).map(RegionState::getState)</span>
+<span class="source-line-no">2664</span><span id="line-2664">          .orElseThrow(</span>
+<span class="source-line-no">2665</span><span id="line-2665">            () -&gt; new ServiceException("No existing state known for region '" + spec + "'."));</span>
+<span class="source-line-no">2666</span><span id="line-2666">        LOG.info("{} set region={} state from {} to {}", server.getClientIdAuditPrefix(),</span>
+<span class="source-line-no">2667</span><span id="line-2667">          targetRegionInfo, currentState, targetState);</span>
+<span class="source-line-no">2668</span><span id="line-2668">        if (currentState == targetState) {</span>
+<span class="source-line-no">2669</span><span id="line-2669">          LOG.debug("Proposed state matches current state. {}, {}", targetRegionInfo, currentState);</span>
+<span class="source-line-no">2670</span><span id="line-2670">          continue;</span>
+<span class="source-line-no">2671</span><span id="line-2671">        }</span>
+<span class="source-line-no">2672</span><span id="line-2672">        MetaTableAccessor.updateRegionState(server.getConnection(), targetRegionInfo, targetState);</span>
+<span class="source-line-no">2673</span><span id="line-2673">        // Loads from meta again to refresh AM cache with the new region state</span>
+<span class="source-line-no">2674</span><span id="line-2674">        am.populateRegionStatesFromMeta(targetRegionInfo);</span>
+<span class="source-line-no">2675</span><span id="line-2675">        builder.addStates(RegionSpecifierAndState.newBuilder().setRegionSpecifier(spec)</span>
+<span class="source-line-no">2676</span><span id="line-2676">          .setState(currentState.convert()));</span>
+<span class="source-line-no">2677</span><span id="line-2677">      }</span>
+<span class="source-line-no">2678</span><span id="line-2678">    } catch (IOException e) {</span>
+<span class="source-line-no">2679</span><span id="line-2679">      throw new ServiceException(e);</span>
+<span class="source-line-no">2680</span><span id="line-2680">    }</span>
+<span class="source-line-no">2681</span><span id="line-2681">    return builder.build();</span>
+<span class="source-line-no">2682</span><span id="line-2682">  }</span>
+<span class="source-line-no">2683</span><span id="line-2683"></span>
+<span class="source-line-no">2684</span><span id="line-2684">  /**</span>
+<span class="source-line-no">2685</span><span id="line-2685">   * Get {@link RegionInfo} from Master using content of {@link RegionSpecifier} as key.</span>
+<span class="source-line-no">2686</span><span id="line-2686">   * @return {@link RegionInfo} found by decoding {@code rs} or {@code null} if {@code rs} is</span>
+<span class="source-line-no">2687</span><span id="line-2687">   *         unknown to the master.</span>
+<span class="source-line-no">2688</span><span id="line-2688">   * @throws ServiceException If some error occurs while querying META or parsing results.</span>
+<span class="source-line-no">2689</span><span id="line-2689">   */</span>
+<span class="source-line-no">2690</span><span id="line-2690">  private RegionInfo getRegionInfo(HBaseProtos.RegionSpecifier rs) throws ServiceException {</span>
+<span class="source-line-no">2691</span><span id="line-2691">    // TODO: this doesn't handle MOB regions. Should it? See the public method #getRegionInfo</span>
+<span class="source-line-no">2692</span><span id="line-2692">    final AssignmentManager am = server.getAssignmentManager();</span>
+<span class="source-line-no">2693</span><span id="line-2693">    final String encodedRegionName;</span>
+<span class="source-line-no">2694</span><span id="line-2694">    final RegionInfo info;</span>
+<span class="source-line-no">2695</span><span id="line-2695">    // first try resolving from the AM's caches.</span>
+<span class="source-line-no">2696</span><span id="line-2696">    switch (rs.getType()) {</span>
+<span class="source-line-no">2697</span><span id="line-2697">      case REGION_NAME:</span>
+<span class="source-line-no">2698</span><span id="line-2698">        final byte[] regionName = rs.getValue().toByteArray();</span>
+<span class="source-line-no">2699</span><span id="line-2699">        encodedRegionName = RegionInfo.encodeRegionName(regionName);</span>
+<span class="source-line-no">2700</span><span id="line-2700">        info = am.getRegionInfo(regionName);</span>
+<span class="source-line-no">2701</span><span id="line-2701">        break;</span>
+<span class="source-line-no">2702</span><span id="line-2702">      case ENCODED_REGION_NAME:</span>
+<span class="source-line-no">2703</span><span id="line-2703">        encodedRegionName = rs.getValue().toStringUtf8();</span>
+<span class="source-line-no">2704</span><span id="line-2704">        info = am.getRegionInfo(encodedRegionName);</span>
+<span class="source-line-no">2705</span><span id="line-2705">        break;</span>
+<span class="source-line-no">2706</span><span id="line-2706">      default:</span>
+<span class="source-line-no">2707</span><span id="line-2707">        throw new IllegalArgumentException("Unrecognized RegionSpecifierType " + rs.getType());</span>
+<span class="source-line-no">2708</span><span id="line-2708">    }</span>
+<span class="source-line-no">2709</span><span id="line-2709">    if (info != null) {</span>
+<span class="source-line-no">2710</span><span id="line-2710">      return info;</span>
+<span class="source-line-no">2711</span><span id="line-2711">    }</span>
+<span class="source-line-no">2712</span><span id="line-2712">    // fall back to a meta scan and check the cache again.</span>
+<span class="source-line-no">2713</span><span id="line-2713">    try {</span>
+<span class="source-line-no">2714</span><span id="line-2714">      am.populateRegionStatesFromMeta(encodedRegionName);</span>
+<span class="source-line-no">2715</span><span id="line-2715">    } catch (IOException e) {</span>
+<span class="source-line-no">2716</span><span id="line-2716">      throw new ServiceException(e);</span>
+<span class="source-line-no">2717</span><span id="line-2717">    }</span>
+<span class="source-line-no">2718</span><span id="line-2718">    return am.getRegionInfo(encodedRegionName);</span>
+<span class="source-line-no">2719</span><span id="line-2719">  }</span>
+<span class="source-line-no">2720</span><span id="line-2720"></span>
+<span class="source-line-no">2721</span><span id="line-2721">  /**</span>
+<span class="source-line-no">2722</span><span id="line-2722">   * @throws ServiceException If no MasterProcedureExecutor</span>
+<span class="source-line-no">2723</span><span id="line-2723">   */</span>
+<span class="source-line-no">2724</span><span id="line-2724">  private void checkMasterProcedureExecutor() throws ServiceException {</span>
+<span class="source-line-no">2725</span><span id="line-2725">    if (this.server.getMasterProcedureExecutor() == null) {</span>
+<span class="source-line-no">2726</span><span id="line-2726">      throw new ServiceException("Master's ProcedureExecutor not initialized; retry later");</span>
+<span class="source-line-no">2727</span><span id="line-2727">    }</span>
+<span class="source-line-no">2728</span><span id="line-2728">  }</span>
+<span class="source-line-no">2729</span><span id="line-2729"></span>
+<span class="source-line-no">2730</span><span id="line-2730">  /**</span>
+<span class="source-line-no">2731</span><span id="line-2731">   * A 'raw' version of assign that does bulk and can skirt Master state checks if override is set;</span>
+<span class="source-line-no">2732</span><span id="line-2732">   * i.e. assigns can be forced during Master startup or if RegionState is unclean. Used by HBCK2.</span>
+<span class="source-line-no">2733</span><span id="line-2733">   */</span>
+<span class="source-line-no">2734</span><span id="line-2734">  @Override</span>
+<span class="source-line-no">2735</span><span id="line-2735">  public MasterProtos.AssignsResponse assigns(RpcController controller,</span>
+<span class="source-line-no">2736</span><span id="line-2736">    MasterProtos.AssignsRequest request) throws ServiceException {</span>
+<span class="source-line-no">2737</span><span id="line-2737">    checkMasterProcedureExecutor();</span>
+<span class="source-line-no">2738</span><span id="line-2738">    final ProcedureExecutor&lt;MasterProcedureEnv&gt; pe = server.getMasterProcedureExecutor();</span>
+<span class="source-line-no">2739</span><span id="line-2739">    final AssignmentManager am = server.getAssignmentManager();</span>
+<span class="source-line-no">2740</span><span id="line-2740">    MasterProtos.AssignsResponse.Builder responseBuilder =</span>
+<span class="source-line-no">2741</span><span id="line-2741">      MasterProtos.AssignsResponse.newBuilder();</span>
+<span class="source-line-no">2742</span><span id="line-2742">    final boolean override = request.getOverride();</span>
+<span class="source-line-no">2743</span><span id="line-2743">    final boolean force = request.getForce();</span>
+<span class="source-line-no">2744</span><span id="line-2744">    LOG.info("{} assigns, override={}", server.getClientIdAuditPrefix(), override);</span>
+<span class="source-line-no">2745</span><span id="line-2745">    for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) {</span>
+<span class="source-line-no">2746</span><span id="line-2746">      final RegionInfo info = getRegionInfo(rs);</span>
+<span class="source-line-no">2747</span><span id="line-2747">      if (info == null) {</span>
+<span class="source-line-no">2748</span><span id="line-2748">        LOG.info("Unknown region {}", rs);</span>
+<span class="source-line-no">2749</span><span id="line-2749">        continue;</span>
+<span class="source-line-no">2750</span><span id="line-2750">      }</span>
+<span class="source-line-no">2751</span><span id="line-2751">      responseBuilder.addPid(Optional.ofNullable(am.createOneAssignProcedure(info, override, force))</span>
+<span class="source-line-no">2752</span><span id="line-2752">        .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID));</span>
+<span class="source-line-no">2753</span><span id="line-2753">    }</span>
+<span class="source-line-no">2754</span><span id="line-2754">    return responseBuilder.build();</span>
+<span class="source-line-no">2755</span><span id="line-2755">  }</span>
+<span class="source-line-no">2756</span><span id="line-2756"></span>
+<span class="source-line-no">2757</span><span id="line-2757">  /**</span>
+<span class="source-line-no">2758</span><span id="line-2758">   * A 'raw' version of unassign that does bulk and can skirt Master state checks if override is</span>
+<span class="source-line-no">2759</span><span id="line-2759">   * set; i.e. unassigns can be forced during Master startup or if RegionState is unclean. Used by</span>
+<span class="source-line-no">2760</span><span id="line-2760">   * HBCK2.</span>
+<span class="source-line-no">2761</span><span id="line-2761">   */</span>
+<span class="source-line-no">2762</span><span id="line-2762">  @Override</span>
+<span class="source-line-no">2763</span><span id="line-2763">  public MasterProtos.UnassignsResponse unassigns(RpcController controller,</span>
+<span class="source-line-no">2764</span><span id="line-2764">    MasterProtos.UnassignsRequest request) throws ServiceException {</span>
+<span class="source-line-no">2765</span><span id="line-2765">    checkMasterProcedureExecutor();</span>
+<span class="source-line-no">2766</span><span id="line-2766">    final ProcedureExecutor&lt;MasterProcedureEnv&gt; pe = server.getMasterProcedureExecutor();</span>
+<span class="source-line-no">2767</span><span id="line-2767">    final AssignmentManager am = server.getAssignmentManager();</span>
+<span class="source-line-no">2768</span><span id="line-2768">    MasterProtos.UnassignsResponse.Builder responseBuilder =</span>
+<span class="source-line-no">2769</span><span id="line-2769">      MasterProtos.UnassignsResponse.newBuilder();</span>
+<span class="source-line-no">2770</span><span id="line-2770">    final boolean override = request.getOverride();</span>
+<span class="source-line-no">2771</span><span id="line-2771">    final boolean force = request.getForce();</span>
+<span class="source-line-no">2772</span><span id="line-2772">    LOG.info("{} unassigns, override={}", server.getClientIdAuditPrefix(), override);</span>
+<span class="source-line-no">2773</span><span id="line-2773">    for (HBaseProtos.RegionSpecifier rs : request.getRegionList()) {</span>
+<span class="source-line-no">2774</span><span id="line-2774">      final RegionInfo info = getRegionInfo(rs);</span>
+<span class="source-line-no">2775</span><span id="line-2775">      if (info == null) {</span>
+<span class="source-line-no">2776</span><span id="line-2776">        LOG.info("Unknown region {}", rs);</span>
+<span class="source-line-no">2777</span><span id="line-2777">        continue;</span>
+<span class="source-line-no">2778</span><span id="line-2778">      }</span>
+<span class="source-line-no">2779</span><span id="line-2779">      responseBuilder</span>
+<span class="source-line-no">2780</span><span id="line-2780">        .addPid(Optional.ofNullable(am.createOneUnassignProcedure(info, override, force))</span>
+<span class="source-line-no">2781</span><span id="line-2781">          .map(pe::submitProcedure).orElse(Procedure.NO_PROC_ID));</span>
+<span class="source-line-no">2782</span><span id="line-2782">    }</span>
+<span class="source-line-no">2783</span><span id="line-2783">    return responseBuilder.build();</span>
+<span class="source-line-no">2784</span><span id="line-2784">  }</span>
+<span class="source-line-no">2785</span><span id="line-2785"></span>
+<span class="source-line-no">2786</span><span id="line-2786">  /**</span>
+<span class="source-line-no">2787</span><span id="line-2787">   * Bypass specified procedure to completion. Procedure is marked completed but no actual work is</span>
+<span class="source-line-no">2788</span><span id="line-2788">   * done from the current state/ step onwards. Parents of the procedure are also marked for bypass.</span>
+<span class="source-line-no">2789</span><span id="line-2789">   * NOTE: this is a dangerous operation and may be used to unstuck buggy procedures. This may leave</span>
+<span class="source-line-no">2790</span><span id="line-2790">   * system in incoherent state. This may need to be followed by some cleanup steps/ actions by</span>
+<span class="source-line-no">2791</span><span id="line-2791">   * operator.</span>
+<span class="source-line-no">2792</span><span id="line-2792">   * @return BypassProcedureToCompletionResponse indicating success or failure</span>
+<span class="source-line-no">2793</span><span id="line-2793">   */</span>
+<span class="source-line-no">2794</span><span id="line-2794">  @Override</span>
+<span class="source-line-no">2795</span><span id="line-2795">  public MasterProtos.BypassProcedureResponse bypassProcedure(RpcController controller,</span>
+<span class="source-line-no">2796</span><span id="line-2796">    MasterProtos.BypassProcedureRequest request) throws ServiceException {</span>
+<span class="source-line-no">2797</span><span id="line-2797">    try {</span>
+<span class="source-line-no">2798</span><span id="line-2798">      LOG.info("{} bypass procedures={}, waitTime={}, override={}, recursive={}",</span>
+<span class="source-line-no">2799</span><span id="line-2799">        server.getClientIdAuditPrefix(), request.getProcIdList(), request.getWaitTime(),</span>
+<span class="source-line-no">2800</span><span id="line-2800">        request.getOverride(), request.getRecursive());</span>
+<span class="source-line-no">2801</span><span id="line-2801">      List&lt;Boolean&gt; ret =</span>
+<span class="source-line-no">2802</span><span id="line-2802">        server.getMasterProcedureExecutor().bypassProcedure(request.getProcIdList(),</span>
+<span class="source-line-no">2803</span><span id="line-2803">          request.getWaitTime(), request.getOverride(), request.getRecursive());</span>
+<span class="source-line-no">2804</span><span id="line-2804">      return MasterProtos.BypassProcedureResponse.newBuilder().addAllBypassed(ret).build();</span>
+<span class="source-line-no">2805</span><span id="line-2805">    } catch (IOException e) {</span>
+<span class="source-line-no">2806</span><span id="line-2806">      throw new ServiceException(e);</span>
+<span class="source-line-no">2807</span><span id="line-2807">    }</span>
+<span class="source-line-no">2808</span><span id="line-2808">  }</span>
+<span class="source-line-no">2809</span><span id="line-2809"></span>
+<span class="source-line-no">2810</span><span id="line-2810">  @Override</span>
+<span class="source-line-no">2811</span><span id="line-2811">  public MasterProtos.ScheduleServerCrashProcedureResponse scheduleServerCrashProcedure(</span>
+<span class="source-line-no">2812</span><span id="line-2812">    RpcController controller, MasterProtos.ScheduleServerCrashProcedureRequest request)</span>
+<span class="source-line-no">2813</span><span id="line-2813">    throws ServiceException {</span>
+<span class="source-line-no">2814</span><span id="line-2814">    List&lt;Long&gt; pids = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">2815</span><span id="line-2815">    for (HBaseProtos.ServerName sn : request.getServerNameList()) {</span>
+<span class="source-line-no">2816</span><span id="line-2816">      ServerName serverName = ProtobufUtil.toServerName(sn);</span>
+<span class="source-line-no">2817</span><span id="line-2817">      LOG.info("{} schedule ServerCrashProcedure for {}", this.server.getClientIdAuditPrefix(),</span>
+<span class="source-line-no">2818</span><span id="line-2818">        serverName);</span>
+<span class="source-line-no">2819</span><span id="line-2819">      if (shouldSubmitSCP(serverName)) {</span>
+<span class="source-line-no">2820</span><span id="line-2820">        pids.add(this.server.getServerManager().expireServer(serverName, true));</span>
+<span class="source-line-no">2821</span><span id="line-2821">      } else {</span>
+<span class="source-line-no">2822</span><span id="line-2822">        pids.add(Procedure.NO_PROC_ID);</span>
+<span class="source-line-no">2823</span><span id="line-2823">      }</span>
+<span class="source-line-no">2824</span><span id="line-2824">    }</span>
+<span class="source-line-no">2825</span><span id="line-2825">    return MasterProtos.ScheduleServerCrashProcedureResponse.newBuilder().addAllPid(pids).build();</span>
+<span class="source-line-no">2826</span><span id="line-2826">  }</span>
+<span class="source-line-no">2827</span><span id="line-2827"></span>
+<span class="source-line-no">2828</span><span id="line-2828">  @Override</span>
+<span class="source-line-no">2829</span><span id="line-2829">  public MasterProtos.ScheduleSCPsForUnknownServersResponse scheduleSCPsForUnknownServers(</span>
+<span class="source-line-no">2830</span><span id="line-2830">    RpcController controller, MasterProtos.ScheduleSCPsForUnknownServersRequest request)</span>
+<span class="source-line-no">2831</span><span id="line-2831">    throws ServiceException {</span>
+<span class="source-line-no">2832</span><span id="line-2832">    List&lt;Long&gt; pids = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">2833</span><span id="line-2833">    final Set&lt;ServerName&gt; serverNames = server.getAssignmentManager().getRegionStates()</span>
+<span class="source-line-no">2834</span><span id="line-2834">      .getRegionStates().stream().map(RegionState::getServerName).collect(Collectors.toSet());</span>
+<span class="source-line-no">2835</span><span id="line-2835"></span>
+<span class="source-line-no">2836</span><span id="line-2836">    final Set&lt;ServerName&gt; unknownServerNames = serverNames.stream()</span>
+<span class="source-line-no">2837</span><span id="line-2837">      .filter(sn -&gt; server.getServerManager().isServerUnknown(sn)).collect(Collectors.toSet());</span>
+<span class="source-line-no">2838</span><span id="line-2838"></span>
+<span class="source-line-no">2839</span><span id="line-2839">    for (ServerName sn : unknownServerNames) {</span>
+<span class="source-line-no">2840</span><span id="line-2840">      LOG.info("{} schedule ServerCrashProcedure for unknown {}",</span>
+<span class="source-line-no">2841</span><span id="line-2841">        this.server.getClientIdAuditPrefix(), sn);</span>
+<span class="source-line-no">2842</span><span id="line-2842">      if (shouldSubmitSCP(sn)) {</span>
+<span class="source-line-no">2843</span><span id="line-2843">        pids.add(this.server.getServerManager().expireServer(sn, true));</span>
+<span class="source-line-no">2844</span><span id="line-2844">      } else {</span>
+<span class="source-line-no">2845</span><span id="line-2845">        pids.add(Procedure.NO_PROC_ID);</span>
+<span class="source-line-no">2846</span><span id="line-2846">      }</span>
+<span class="source-line-no">2847</span><span id="line-2847">    }</span>
+<span class="source-line-no">2848</span><span id="line-2848">    return MasterProtos.ScheduleSCPsForUnknownServersResponse.newBuilder().addAllPid(pids).build();</span>
+<span class="source-line-no">2849</span><span id="line-2849">  }</span>
+<span class="source-line-no">2850</span><span id="line-2850"></span>
+<span class="source-line-no">2851</span><span id="line-2851">  @Override</span>
+<span class="source-line-no">2852</span><span id="line-2852">  public FixMetaResponse fixMeta(RpcController controller, FixMetaRequest request)</span>
+<span class="source-line-no">2853</span><span id="line-2853">    throws ServiceException {</span>
+<span class="source-line-no">2854</span><span id="line-2854">    rpcPreCheck("fixMeta");</span>
+<span class="source-line-no">2855</span><span id="line-2855">    try {</span>
+<span class="source-line-no">2856</span><span id="line-2856">      MetaFixer mf = new MetaFixer(this.server);</span>
+<span class="source-line-no">2857</span><span id="line-2857">      mf.fix();</span>
+<span class="source-line-no">2858</span><span id="line-2858">      return FixMetaResponse.newBuilder().build();</span>
+<span class="source-line-no">2859</span><span id="line-2859">    } catch (IOException ioe) {</span>
+<span class="source-line-no">2860</span><span id="line-2860">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2861</span><span id="line-2861">    }</span>
+<span class="source-line-no">2862</span><span id="line-2862">  }</span>
+<span class="source-line-no">2863</span><span id="line-2863"></span>
+<span class="source-line-no">2864</span><span id="line-2864">  @Override</span>
+<span class="source-line-no">2865</span><span id="line-2865">  public SwitchRpcThrottleResponse switchRpcThrottle(RpcController controller,</span>
+<span class="source-line-no">2866</span><span id="line-2866">    SwitchRpcThrottleRequest request) throws ServiceException {</span>
+<span class="source-line-no">2867</span><span id="line-2867">    try {</span>
+<span class="source-line-no">2868</span><span id="line-2868">      server.checkInitialized();</span>
+<span class="source-line-no">2869</span><span id="line-2869">      return server.getMasterQuotaManager().switchRpcThrottle(request);</span>
+<span class="source-line-no">2870</span><span id="line-2870">    } catch (Exception e) {</span>
+<span class="source-line-no">2871</span><span id="line-2871">      throw new ServiceException(e);</span>
+<span class="source-line-no">2872</span><span id="line-2872">    }</span>
+<span class="source-line-no">2873</span><span id="line-2873">  }</span>
+<span class="source-line-no">2874</span><span id="line-2874"></span>
+<span class="source-line-no">2875</span><span id="line-2875">  @Override</span>
+<span class="source-line-no">2876</span><span id="line-2876">  public MasterProtos.IsRpcThrottleEnabledResponse isRpcThrottleEnabled(RpcController controller,</span>
+<span class="source-line-no">2877</span><span id="line-2877">    MasterProtos.IsRpcThrottleEnabledRequest request) throws ServiceException {</span>
+<span class="source-line-no">2878</span><span id="line-2878">    try {</span>
+<span class="source-line-no">2879</span><span id="line-2879">      server.checkInitialized();</span>
+<span class="source-line-no">2880</span><span id="line-2880">      return server.getMasterQuotaManager().isRpcThrottleEnabled(request);</span>
+<span class="source-line-no">2881</span><span id="line-2881">    } catch (Exception e) {</span>
+<span class="source-line-no">2882</span><span id="line-2882">      throw new ServiceException(e);</span>
+<span class="source-line-no">2883</span><span id="line-2883">    }</span>
+<span class="source-line-no">2884</span><span id="line-2884">  }</span>
+<span class="source-line-no">2885</span><span id="line-2885"></span>
+<span class="source-line-no">2886</span><span id="line-2886">  @Override</span>
+<span class="source-line-no">2887</span><span id="line-2887">  public SwitchExceedThrottleQuotaResponse switchExceedThrottleQuota(RpcController controller,</span>
+<span class="source-line-no">2888</span><span id="line-2888">    SwitchExceedThrottleQuotaRequest request) throws ServiceException {</span>
+<span class="source-line-no">2889</span><span id="line-2889">    try {</span>
+<span class="source-line-no">2890</span><span id="line-2890">      server.checkInitialized();</span>
+<span class="source-line-no">2891</span><span id="line-2891">      return server.getMasterQuotaManager().switchExceedThrottleQuota(request);</span>
+<span class="source-line-no">2892</span><span id="line-2892">    } catch (Exception e) {</span>
+<span class="source-line-no">2893</span><span id="line-2893">      throw new ServiceException(e);</span>
+<span class="source-line-no">2894</span><span id="line-2894">    }</span>
+<span class="source-line-no">2895</span><span id="line-2895">  }</span>
+<span class="source-line-no">2896</span><span id="line-2896"></span>
+<span class="source-line-no">2897</span><span id="line-2897">  @Override</span>
+<span class="source-line-no">2898</span><span id="line-2898">  public GrantResponse grant(RpcController controller, GrantRequest request)</span>
+<span class="source-line-no">2899</span><span id="line-2899">    throws ServiceException {</span>
+<span class="source-line-no">2900</span><span id="line-2900">    try {</span>
+<span class="source-line-no">2901</span><span id="line-2901">      server.checkInitialized();</span>
+<span class="source-line-no">2902</span><span id="line-2902">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
+<span class="source-line-no">2903</span><span id="line-2903">        final UserPermission perm =</span>
+<span class="source-line-no">2904</span><span id="line-2904">          ShadedAccessControlUtil.toUserPermission(request.getUserPermission());</span>
+<span class="source-line-no">2905</span><span id="line-2905">        boolean mergeExistingPermissions = request.getMergeExistingPermissions();</span>
+<span class="source-line-no">2906</span><span id="line-2906">        server.cpHost.preGrant(perm, mergeExistingPermissions);</span>
+<span class="source-line-no">2907</span><span id="line-2907">        try (Table table = server.getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {</span>
+<span class="source-line-no">2908</span><span id="line-2908">          PermissionStorage.addUserPermission(getConfiguration(), perm, table,</span>
+<span class="source-line-no">2909</span><span id="line-2909">            mergeExistingPermissions);</span>
+<span class="source-line-no">2910</span><span id="line-2910">        }</span>
+<span class="source-line-no">2911</span><span id="line-2911">        server.cpHost.postGrant(perm, mergeExistingPermissions);</span>
+<span class="source-line-no">2912</span><span id="line-2912">        return GrantResponse.getDefaultInstance();</span>
+<span class="source-line-no">2913</span><span id="line-2913">      } else {</span>
+<span class="source-line-no">2914</span><span id="line-2914">        throw new DoNotRetryIOException(</span>
+<span class="source-line-no">2915</span><span id="line-2915">          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span>
+<span class="source-line-no">2916</span><span id="line-2916">      }</span>
+<span class="source-line-no">2917</span><span id="line-2917">    } catch (IOException ioe) {</span>
+<span class="source-line-no">2918</span><span id="line-2918">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2919</span><span id="line-2919">    }</span>
+<span class="source-line-no">2920</span><span id="line-2920">  }</span>
+<span class="source-line-no">2921</span><span id="line-2921"></span>
+<span class="source-line-no">2922</span><span id="line-2922">  @Override</span>
+<span class="source-line-no">2923</span><span id="line-2923">  public RevokeResponse revoke(RpcController controller, RevokeRequest request)</span>
+<span class="source-line-no">2924</span><span id="line-2924">    throws ServiceException {</span>
+<span class="source-line-no">2925</span><span id="line-2925">    try {</span>
+<span class="source-line-no">2926</span><span id="line-2926">      server.checkInitialized();</span>
+<span class="source-line-no">2927</span><span id="line-2927">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
+<span class="source-line-no">2928</span><span id="line-2928">        final UserPermission userPermission =</span>
+<span class="source-line-no">2929</span><span id="line-2929">          ShadedAccessControlUtil.toUserPermission(request.getUserPermission());</span>
+<span class="source-line-no">2930</span><span id="line-2930">        server.cpHost.preRevoke(userPermission);</span>
+<span class="source-line-no">2931</span><span id="line-2931">        try (Table table = server.getConnection().getTable(PermissionStorage.ACL_TABLE_NAME)) {</span>
+<span class="source-line-no">2932</span><span id="line-2932">          PermissionStorage.removeUserPermission(server.getConfiguration(), userPermission, table);</span>
+<span class="source-line-no">2933</span><span id="line-2933">        }</span>
+<span class="source-line-no">2934</span><span id="line-2934">        server.cpHost.postRevoke(userPermission);</span>
+<span class="source-line-no">2935</span><span id="line-2935">        return RevokeResponse.getDefaultInstance();</span>
+<span class="source-line-no">2936</span><span id="line-2936">      } else {</span>
+<span class="source-line-no">2937</span><span id="line-2937">        throw new DoNotRetryIOException(</span>
+<span class="source-line-no">2938</span><span id="line-2938">          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span>
+<span class="source-line-no">2939</span><span id="line-2939">      }</span>
+<span class="source-line-no">2940</span><span id="line-2940">    } catch (IOException ioe) {</span>
+<span class="source-line-no">2941</span><span id="line-2941">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2942</span><span id="line-2942">    }</span>
+<span class="source-line-no">2943</span><span id="line-2943">  }</span>
+<span class="source-line-no">2944</span><span id="line-2944"></span>
+<span class="source-line-no">2945</span><span id="line-2945">  @Override</span>
+<span class="source-line-no">2946</span><span id="line-2946">  public GetUserPermissionsResponse getUserPermissions(RpcController controller,</span>
+<span class="source-line-no">2947</span><span id="line-2947">    GetUserPermissionsRequest request) throws ServiceException {</span>
+<span class="source-line-no">2948</span><span id="line-2948">    try {</span>
+<span class="source-line-no">2949</span><span id="line-2949">      server.checkInitialized();</span>
+<span class="source-line-no">2950</span><span id="line-2950">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
+<span class="source-line-no">2951</span><span id="line-2951">        final String userName = request.hasUserName() ? request.getUserName().toStringUtf8() : null;</span>
+<span class="source-line-no">2952</span><span id="line-2952">        String namespace =</span>
+<span class="source-line-no">2953</span><span id="line-2953">          request.hasNamespaceName() ? request.getNamespaceName().toStringUtf8() : null;</span>
+<span class="source-line-no">2954</span><span id="line-2954">        TableName table =</span>
+<span class="source-line-no">2955</span><span id="line-2955">          request.hasTableName() ? ProtobufUtil.toTableName(request.getTableName()) : null;</span>
+<span class="source-line-no">2956</span><span id="line-2956">        byte[] cf = request.hasColumnFamily() ? request.getColumnFamily().toByteArray() : null;</span>
+<span class="source-line-no">2957</span><span id="line-2957">        byte[] cq =</span>
+<span class="source-line-no">2958</span><span id="line-2958">          request.hasColumnQualifier() ? request.getColumnQualifier().toByteArray() : null;</span>
+<span class="source-line-no">2959</span><span id="line-2959">        Type permissionType = request.hasType() ? request.getType() : null;</span>
+<span class="source-line-no">2960</span><span id="line-2960">        server.getMasterCoprocessorHost().preGetUserPermissions(userName, namespace, table, cf, cq);</span>
+<span class="source-line-no">2961</span><span id="line-2961"></span>
+<span class="source-line-no">2962</span><span id="line-2962">        List&lt;UserPermission&gt; perms = null;</span>
+<span class="source-line-no">2963</span><span id="line-2963">        if (permissionType == Type.Table) {</span>
+<span class="source-line-no">2964</span><span id="line-2964">          boolean filter = (cf != null || userName != null) ? true : false;</span>
+<span class="source-line-no">2965</span><span id="line-2965">          perms = PermissionStorage.getUserTablePermissions(server.getConfiguration(), table, cf,</span>
+<span class="source-line-no">2966</span><span id="line-2966">            cq, userName, filter);</span>
+<span class="source-line-no">2967</span><span id="line-2967">        } else if (permissionType == Type.Namespace) {</span>
+<span class="source-line-no">2968</span><span id="line-2968">          perms = PermissionStorage.getUserNamespacePermissions(server.getConfiguration(),</span>
+<span class="source-line-no">2969</span><span id="line-2969">            namespace, userName, userName != null ? true : false);</span>
+<span class="source-line-no">2970</span><span id="line-2970">        } else {</span>
+<span class="source-line-no">2971</span><span id="line-2971">          perms = PermissionStorage.getUserPermissions(server.getConfiguration(), null, null, null,</span>
+<span class="source-line-no">2972</span><span id="line-2972">            userName, userName != null ? true : false);</span>
+<span class="source-line-no">2973</span><span id="line-2973">          // Skip super users when filter user is specified</span>
+<span class="source-line-no">2974</span><span id="line-2974">          if (userName == null) {</span>
+<span class="source-line-no">2975</span><span id="line-2975">            // Adding superusers explicitly to the result set as PermissionStorage do not store</span>
+<span class="source-line-no">2976</span><span id="line-2976">            // them. Also using acl as table name to be inline with the results of global admin and</span>
+<span class="source-line-no">2977</span><span id="line-2977">            // will help in avoiding any leakage of information about being superusers.</span>
+<span class="source-line-no">2978</span><span id="line-2978">            for (String user : Superusers.getSuperUsers()) {</span>
+<span class="source-line-no">2979</span><span id="line-2979">              perms.add(new UserPermission(user,</span>
+<span class="source-line-no">2980</span><span id="line-2980">                Permission.newBuilder().withActions(Action.values()).build()));</span>
+<span class="source-line-no">2981</span><span id="line-2981">            }</span>
+<span class="source-line-no">2982</span><span id="line-2982">          }</span>
+<span class="source-line-no">2983</span><span id="line-2983">        }</span>
+<span class="source-line-no">2984</span><span id="line-2984"></span>
+<span class="source-line-no">2985</span><span id="line-2985">        server.getMasterCoprocessorHost().postGetUserPermissions(userName, namespace, table, cf,</span>
+<span class="source-line-no">2986</span><span id="line-2986">          cq);</span>
+<span class="source-line-no">2987</span><span id="line-2987">        AccessControlProtos.GetUserPermissionsResponse response =</span>
+<span class="source-line-no">2988</span><span id="line-2988">          ShadedAccessControlUtil.buildGetUserPermissionsResponse(perms);</span>
+<span class="source-line-no">2989</span><span id="line-2989">        return response;</span>
+<span class="source-line-no">2990</span><span id="line-2990">      } else {</span>
+<span class="source-line-no">2991</span><span id="line-2991">        throw new DoNotRetryIOException(</span>
+<span class="source-line-no">2992</span><span id="line-2992">          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span>
+<span class="source-line-no">2993</span><span id="line-2993">      }</span>
+<span class="source-line-no">2994</span><span id="line-2994">    } catch (IOException ioe) {</span>
+<span class="source-line-no">2995</span><span id="line-2995">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">2996</span><span id="line-2996">    }</span>
+<span class="source-line-no">2997</span><span id="line-2997">  }</span>
+<span class="source-line-no">2998</span><span id="line-2998"></span>
+<span class="source-line-no">2999</span><span id="line-2999">  @Override</span>
+<span class="source-line-no">3000</span><span id="line-3000">  public HasUserPermissionsResponse hasUserPermissions(RpcController controller,</span>
+<span class="source-line-no">3001</span><span id="line-3001">    HasUserPermissionsRequest request) throws ServiceException {</span>
+<span class="source-line-no">3002</span><span id="line-3002">    try {</span>
+<span class="source-line-no">3003</span><span id="line-3003">      server.checkInitialized();</span>
+<span class="source-line-no">3004</span><span id="line-3004">      if (server.cpHost != null &amp;&amp; hasAccessControlServiceCoprocessor(server.cpHost)) {</span>
+<span class="source-line-no">3005</span><span id="line-3005">        User caller = RpcServer.getRequestUser().orElse(null);</span>
+<span class="source-line-no">3006</span><span id="line-3006">        String userName =</span>
+<span class="source-line-no">3007</span><span id="line-3007">          request.hasUserName() ? request.getUserName().toStringUtf8() : caller.getShortName();</span>
+<span class="source-line-no">3008</span><span id="line-3008">        List&lt;Permission&gt; permissions = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">3009</span><span id="line-3009">        for (int i = 0; i &lt; request.getPermissionCount(); i++) {</span>
+<span class="source-line-no">3010</span><span id="line-3010">          permissions.add(ShadedAccessControlUtil.toPermission(request.getPermission(i)));</span>
+<span class="source-line-no">3011</span><span id="line-3011">        }</span>
+<span class="source-line-no">3012</span><span id="line-3012">        server.getMasterCoprocessorHost().preHasUserPermissions(userName, permissions);</span>
+<span class="source-line-no">3013</span><span id="line-3013">        if (!caller.getShortName().equals(userName)) {</span>
+<span class="source-line-no">3014</span><span id="line-3014">          List&lt;String&gt; groups = AccessChecker.getUserGroups(userName);</span>
+<span class="source-line-no">3015</span><span id="line-3015">          caller = new InputUser(userName, groups.toArray(new String[groups.size()]));</span>
+<span class="source-line-no">3016</span><span id="line-3016">        }</span>
+<span class="source-line-no">3017</span><span id="line-3017">        List&lt;Boolean&gt; hasUserPermissions = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">3018</span><span id="line-3018">        if (getAccessChecker() != null) {</span>
+<span class="source-line-no">3019</span><span id="line-3019">          for (Permission permission : permissions) {</span>
+<span class="source-line-no">3020</span><span id="line-3020">            boolean hasUserPermission =</span>
+<span class="source-line-no">3021</span><span id="line-3021">              getAccessChecker().hasUserPermission(caller, "hasUserPermissions", permission);</span>
+<span class="source-line-no">3022</span><span id="line-3022">            hasUserPermissions.add(hasUserPermission);</span>
+<span class="source-line-no">3023</span><span id="line-3023">          }</span>
+<span class="source-line-no">3024</span><span id="line-3024">        } else {</span>
+<span class="source-line-no">3025</span><span id="line-3025">          for (int i = 0; i &lt; permissions.size(); i++) {</span>
+<span class="source-line-no">3026</span><span id="line-3026">            hasUserPermissions.add(true);</span>
+<span class="source-line-no">3027</span><span id="line-3027">          }</span>
+<span class="source-line-no">3028</span><span id="line-3028">        }</span>
+<span class="source-line-no">3029</span><span id="line-3029">        server.getMasterCoprocessorHost().postHasUserPermissions(userName, permissions);</span>
+<span class="source-line-no">3030</span><span id="line-3030">        HasUserPermissionsResponse.Builder builder =</span>
+<span class="source-line-no">3031</span><span id="line-3031">          HasUserPermissionsResponse.newBuilder().addAllHasUserPermission(hasUserPermissions);</span>
+<span class="source-line-no">3032</span><span id="line-3032">        return builder.build();</span>
+<span class="source-line-no">3033</span><span id="line-3033">      } else {</span>
+<span class="source-line-no">3034</span><span id="line-3034">        throw new DoNotRetryIOException(</span>
+<span class="source-line-no">3035</span><span id="line-3035">          new UnsupportedOperationException(AccessController.class.getName() + " is not loaded"));</span>
+<span class="source-line-no">3036</span><span id="line-3036">      }</span>
+<span class="source-line-no">3037</span><span id="line-3037">    } catch (IOException ioe) {</span>
+<span class="source-line-no">3038</span><span id="line-3038">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">3039</span><span id="line-3039">    }</span>
+<span class="source-line-no">3040</span><span id="line-3040">  }</span>
+<span class="source-line-no">3041</span><span id="line-3041"></span>
+<span class="source-line-no">3042</span><span id="line-3042">  private boolean shouldSubmitSCP(ServerName serverName) {</span>
+<span class="source-line-no">3043</span><span id="line-3043">    // check if there is already a SCP of this server running</span>
+<span class="source-line-no">3044</span><span id="line-3044">    List&lt;Procedure&lt;MasterProcedureEnv&gt;&gt; procedures =</span>
+<span class="source-line-no">3045</span><span id="line-3045">      server.getMasterProcedureExecutor().getProcedures();</span>
+<span class="source-line-no">3046</span><span id="line-3046">    for (Procedure&lt;MasterProcedureEnv&gt; procedure : procedures) {</span>
+<span class="source-line-no">3047</span><span id="line-3047">      if (procedure instanceof ServerCrashProcedure) {</span>
+<span class="source-line-no">3048</span><span id="line-3048">        if (</span>
+<span class="source-line-no">3049</span><span id="line-3049">          serverName.compareTo(((ServerCrashProcedure) procedure).getServerName()) == 0</span>
+<span class="source-line-no">3050</span><span id="line-3050">            &amp;&amp; !procedure.isFinished()</span>
+<span class="source-line-no">3051</span><span id="line-3051">        ) {</span>
+<span class="source-line-no">3052</span><span id="line-3052">          LOG.info("there is already a SCP of this server {} running, pid {}", serverName,</span>
+<span class="source-line-no">3053</span><span id="line-3053">            procedure.getProcId());</span>
+<span class="source-line-no">3054</span><span id="line-3054">          return false;</span>
+<span class="source-line-no">3055</span><span id="line-3055">        }</span>
+<span class="source-line-no">3056</span><span id="line-3056">      }</span>
+<span class="source-line-no">3057</span><span id="line-3057">    }</span>
+<span class="source-line-no">3058</span><span id="line-3058">    return true;</span>
+<span class="source-line-no">3059</span><span id="line-3059">  }</span>
+<span class="source-line-no">3060</span><span id="line-3060"></span>
+<span class="source-line-no">3061</span><span id="line-3061">  @Override</span>
+<span class="source-line-no">3062</span><span id="line-3062">  public GetRSGroupInfoResponse getRSGroupInfo(RpcController controller,</span>
+<span class="source-line-no">3063</span><span id="line-3063">    GetRSGroupInfoRequest request) throws ServiceException {</span>
+<span class="source-line-no">3064</span><span id="line-3064">    String groupName = request.getRSGroupName();</span>
+<span class="source-line-no">3065</span><span id="line-3065">    LOG.info(</span>
+<span class="source-line-no">3066</span><span id="line-3066">      server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, group=" + groupName);</span>
+<span class="source-line-no">3067</span><span id="line-3067">    try {</span>
+<span class="source-line-no">3068</span><span id="line-3068">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3069</span><span id="line-3069">        server.getMasterCoprocessorHost().preGetRSGroupInfo(groupName);</span>
+<span class="source-line-no">3070</span><span id="line-3070">      }</span>
+<span class="source-line-no">3071</span><span id="line-3071">      RSGroupInfo rsGroupInfo = server.getRSGroupInfoManager().getRSGroup(groupName);</span>
+<span class="source-line-no">3072</span><span id="line-3072">      GetRSGroupInfoResponse resp;</span>
+<span class="source-line-no">3073</span><span id="line-3073">      if (rsGroupInfo != null) {</span>
+<span class="source-line-no">3074</span><span id="line-3074">        resp = GetRSGroupInfoResponse.newBuilder()</span>
+<span class="source-line-no">3075</span><span id="line-3075">          .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span>
+<span class="source-line-no">3076</span><span id="line-3076">      } else {</span>
+<span class="source-line-no">3077</span><span id="line-3077">        resp = GetRSGroupInfoResponse.getDefaultInstance();</span>
+<span class="source-line-no">3078</span><span id="line-3078">      }</span>
+<span class="source-line-no">3079</span><span id="line-3079">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3080</span><span id="line-3080">        server.getMasterCoprocessorHost().postGetRSGroupInfo(groupName);</span>
+<span class="source-line-no">3081</span><span id="line-3081">      }</span>
+<span class="source-line-no">3082</span><span id="line-3082">      return resp;</span>
+<span class="source-line-no">3083</span><span id="line-3083">    } catch (IOException e) {</span>
+<span class="source-line-no">3084</span><span id="line-3084">      throw new ServiceException(e);</span>
+<span class="source-line-no">3085</span><span id="line-3085">    }</span>
+<span class="source-line-no">3086</span><span id="line-3086">  }</span>
+<span class="source-line-no">3087</span><span id="line-3087"></span>
+<span class="source-line-no">3088</span><span id="line-3088">  @Override</span>
+<span class="source-line-no">3089</span><span id="line-3089">  public GetRSGroupInfoOfTableResponse getRSGroupInfoOfTable(RpcController controller,</span>
+<span class="source-line-no">3090</span><span id="line-3090">    GetRSGroupInfoOfTableRequest request) throws ServiceException {</span>
+<span class="source-line-no">3091</span><span id="line-3091">    TableName tableName = ProtobufUtil.toTableName(request.getTableName());</span>
+<span class="source-line-no">3092</span><span id="line-3092">    LOG.info(</span>
+<span class="source-line-no">3093</span><span id="line-3093">      server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, table=" + tableName);</span>
+<span class="source-line-no">3094</span><span id="line-3094">    try {</span>
+<span class="source-line-no">3095</span><span id="line-3095">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3096</span><span id="line-3096">        server.getMasterCoprocessorHost().preGetRSGroupInfoOfTable(tableName);</span>
+<span class="source-line-no">3097</span><span id="line-3097">      }</span>
+<span class="source-line-no">3098</span><span id="line-3098">      GetRSGroupInfoOfTableResponse resp;</span>
+<span class="source-line-no">3099</span><span id="line-3099">      TableDescriptor td = server.getTableDescriptors().get(tableName);</span>
+<span class="source-line-no">3100</span><span id="line-3100">      if (td == null) {</span>
+<span class="source-line-no">3101</span><span id="line-3101">        resp = GetRSGroupInfoOfTableResponse.getDefaultInstance();</span>
+<span class="source-line-no">3102</span><span id="line-3102">      } else {</span>
+<span class="source-line-no">3103</span><span id="line-3103">        RSGroupInfo rsGroupInfo =</span>
+<span class="source-line-no">3104</span><span id="line-3104">          RSGroupUtil.getRSGroupInfo(server, server.getRSGroupInfoManager(), tableName)</span>
+<span class="source-line-no">3105</span><span id="line-3105">            .orElse(server.getRSGroupInfoManager().getRSGroup(RSGroupInfo.DEFAULT_GROUP));</span>
+<span class="source-line-no">3106</span><span id="line-3106">        resp = GetRSGroupInfoOfTableResponse.newBuilder()</span>
+<span class="source-line-no">3107</span><span id="line-3107">          .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span>
+<span class="source-line-no">3108</span><span id="line-3108">      }</span>
+<span class="source-line-no">3109</span><span id="line-3109">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3110</span><span id="line-3110">        server.getMasterCoprocessorHost().postGetRSGroupInfoOfTable(tableName);</span>
+<span class="source-line-no">3111</span><span id="line-3111">      }</span>
+<span class="source-line-no">3112</span><span id="line-3112">      return resp;</span>
+<span class="source-line-no">3113</span><span id="line-3113">    } catch (IOException e) {</span>
+<span class="source-line-no">3114</span><span id="line-3114">      throw new ServiceException(e);</span>
+<span class="source-line-no">3115</span><span id="line-3115">    }</span>
+<span class="source-line-no">3116</span><span id="line-3116">  }</span>
+<span class="source-line-no">3117</span><span id="line-3117"></span>
+<span class="source-line-no">3118</span><span id="line-3118">  @Override</span>
+<span class="source-line-no">3119</span><span id="line-3119">  public GetRSGroupInfoOfServerResponse getRSGroupInfoOfServer(RpcController controller,</span>
+<span class="source-line-no">3120</span><span id="line-3120">    GetRSGroupInfoOfServerRequest request) throws ServiceException {</span>
+<span class="source-line-no">3121</span><span id="line-3121">    Address hp =</span>
+<span class="source-line-no">3122</span><span id="line-3122">      Address.fromParts(request.getServer().getHostName(), request.getServer().getPort());</span>
+<span class="source-line-no">3123</span><span id="line-3123">    LOG.info(server.getClientIdAuditPrefix() + " initiates rsgroup info retrieval, server=" + hp);</span>
+<span class="source-line-no">3124</span><span id="line-3124">    try {</span>
+<span class="source-line-no">3125</span><span id="line-3125">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3126</span><span id="line-3126">        server.getMasterCoprocessorHost().preGetRSGroupInfoOfServer(hp);</span>
+<span class="source-line-no">3127</span><span id="line-3127">      }</span>
+<span class="source-line-no">3128</span><span id="line-3128">      RSGroupInfo rsGroupInfo = server.getRSGroupInfoManager().getRSGroupOfServer(hp);</span>
+<span class="source-line-no">3129</span><span id="line-3129">      GetRSGroupInfoOfServerResponse resp;</span>
+<span class="source-line-no">3130</span><span id="line-3130">      if (rsGroupInfo != null) {</span>
+<span class="source-line-no">3131</span><span id="line-3131">        resp = GetRSGroupInfoOfServerResponse.newBuilder()</span>
+<span class="source-line-no">3132</span><span id="line-3132">          .setRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo)).build();</span>
+<span class="source-line-no">3133</span><span id="line-3133">      } else {</span>
+<span class="source-line-no">3134</span><span id="line-3134">        resp = GetRSGroupInfoOfServerResponse.getDefaultInstance();</span>
+<span class="source-line-no">3135</span><span id="line-3135">      }</span>
+<span class="source-line-no">3136</span><span id="line-3136">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3137</span><span id="line-3137">        server.getMasterCoprocessorHost().postGetRSGroupInfoOfServer(hp);</span>
+<span class="source-line-no">3138</span><span id="line-3138">      }</span>
+<span class="source-line-no">3139</span><span id="line-3139">      return resp;</span>
+<span class="source-line-no">3140</span><span id="line-3140">    } catch (IOException e) {</span>
+<span class="source-line-no">3141</span><span id="line-3141">      throw new ServiceException(e);</span>
+<span class="source-line-no">3142</span><span id="line-3142">    }</span>
+<span class="source-line-no">3143</span><span id="line-3143">  }</span>
+<span class="source-line-no">3144</span><span id="line-3144"></span>
+<span class="source-line-no">3145</span><span id="line-3145">  @Override</span>
+<span class="source-line-no">3146</span><span id="line-3146">  public MoveServersResponse moveServers(RpcController controller, MoveServersRequest request)</span>
+<span class="source-line-no">3147</span><span id="line-3147">    throws ServiceException {</span>
+<span class="source-line-no">3148</span><span id="line-3148">    Set&lt;Address&gt; hostPorts = Sets.newHashSet();</span>
+<span class="source-line-no">3149</span><span id="line-3149">    MoveServersResponse.Builder builder = MoveServersResponse.newBuilder();</span>
+<span class="source-line-no">3150</span><span id="line-3150">    for (HBaseProtos.ServerName el : request.getServersList()) {</span>
+<span class="source-line-no">3151</span><span id="line-3151">      hostPorts.add(Address.fromParts(el.getHostName(), el.getPort()));</span>
+<span class="source-line-no">3152</span><span id="line-3152">    }</span>
+<span class="source-line-no">3153</span><span id="line-3153">    LOG.info(server.getClientIdAuditPrefix() + " move servers " + hostPorts + " to rsgroup "</span>
+<span class="source-line-no">3154</span><span id="line-3154">      + request.getTargetGroup());</span>
+<span class="source-line-no">3155</span><span id="line-3155">    try {</span>
+<span class="source-line-no">3156</span><span id="line-3156">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3157</span><span id="line-3157">        server.getMasterCoprocessorHost().preMoveServers(hostPorts, request.getTargetGroup());</span>
+<span class="source-line-no">3158</span><span id="line-3158">      }</span>
+<span class="source-line-no">3159</span><span id="line-3159">      server.getRSGroupInfoManager().moveServers(hostPorts, request.getTargetGroup());</span>
+<span class="source-line-no">3160</span><span id="line-3160">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3161</span><span id="line-3161">        server.getMasterCoprocessorHost().postMoveServers(hostPorts, request.getTargetGroup());</span>
+<span class="source-line-no">3162</span><span id="line-3162">      }</span>
+<span class="source-line-no">3163</span><span id="line-3163">    } catch (IOException e) {</span>
+<span class="source-line-no">3164</span><span id="line-3164">      throw new ServiceException(e);</span>
+<span class="source-line-no">3165</span><span id="line-3165">    }</span>
+<span class="source-line-no">3166</span><span id="line-3166">    return builder.build();</span>
+<span class="source-line-no">3167</span><span id="line-3167">  }</span>
+<span class="source-line-no">3168</span><span id="line-3168"></span>
+<span class="source-line-no">3169</span><span id="line-3169">  @Override</span>
+<span class="source-line-no">3170</span><span id="line-3170">  public AddRSGroupResponse addRSGroup(RpcController controller, AddRSGroupRequest request)</span>
+<span class="source-line-no">3171</span><span id="line-3171">    throws ServiceException {</span>
+<span class="source-line-no">3172</span><span id="line-3172">    AddRSGroupResponse.Builder builder = AddRSGroupResponse.newBuilder();</span>
+<span class="source-line-no">3173</span><span id="line-3173">    LOG.info(server.getClientIdAuditPrefix() + " add rsgroup " + request.getRSGroupName());</span>
+<span class="source-line-no">3174</span><span id="line-3174">    try {</span>
+<span class="source-line-no">3175</span><span id="line-3175">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3176</span><span id="line-3176">        server.getMasterCoprocessorHost().preAddRSGroup(request.getRSGroupName());</span>
+<span class="source-line-no">3177</span><span id="line-3177">      }</span>
+<span class="source-line-no">3178</span><span id="line-3178">      server.getRSGroupInfoManager().addRSGroup(new RSGroupInfo(request.getRSGroupName()));</span>
+<span class="source-line-no">3179</span><span id="line-3179">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3180</span><span id="line-3180">        server.getMasterCoprocessorHost().postAddRSGroup(request.getRSGroupName());</span>
+<span class="source-line-no">3181</span><span id="line-3181">      }</span>
+<span class="source-line-no">3182</span><span id="line-3182">    } catch (IOException e) {</span>
+<span class="source-line-no">3183</span><span id="line-3183">      throw new ServiceException(e);</span>
+<span class="source-line-no">3184</span><span id="line-3184">    }</span>
+<span class="source-line-no">3185</span><span id="line-3185">    return builder.build();</span>
+<span class="source-line-no">3186</span><span id="line-3186">  }</span>
+<span class="source-line-no">3187</span><span id="line-3187"></span>
+<span class="source-line-no">3188</span><span id="line-3188">  @Override</span>
+<span class="source-line-no">3189</span><span id="line-3189">  public RemoveRSGroupResponse removeRSGroup(RpcController controller, RemoveRSGroupRequest request)</span>
+<span class="source-line-no">3190</span><span id="line-3190">    throws ServiceException {</span>
+<span class="source-line-no">3191</span><span id="line-3191">    RemoveRSGroupResponse.Builder builder = RemoveRSGroupResponse.newBuilder();</span>
+<span class="source-line-no">3192</span><span id="line-3192">    LOG.info(server.getClientIdAuditPrefix() + " remove rsgroup " + request.getRSGroupName());</span>
+<span class="source-line-no">3193</span><span id="line-3193">    try {</span>
+<span class="source-line-no">3194</span><span id="line-3194">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3195</span><span id="line-3195">        server.getMasterCoprocessorHost().preRemoveRSGroup(request.getRSGroupName());</span>
+<span class="source-line-no">3196</span><span id="line-3196">      }</span>
+<span class="source-line-no">3197</span><span id="line-3197">      server.getRSGroupInfoManager().removeRSGroup(request.getRSGroupName());</span>
+<span class="source-line-no">3198</span><span id="line-3198">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3199</span><span id="line-3199">        server.getMasterCoprocessorHost().postRemoveRSGroup(request.getRSGroupName());</span>
+<span class="source-line-no">3200</span><span id="line-3200">      }</span>
+<span class="source-line-no">3201</span><span id="line-3201">    } catch (IOException e) {</span>
+<span class="source-line-no">3202</span><span id="line-3202">      throw new ServiceException(e);</span>
+<span class="source-line-no">3203</span><span id="line-3203">    }</span>
+<span class="source-line-no">3204</span><span id="line-3204">    return builder.build();</span>
+<span class="source-line-no">3205</span><span id="line-3205">  }</span>
+<span class="source-line-no">3206</span><span id="line-3206"></span>
+<span class="source-line-no">3207</span><span id="line-3207">  @Override</span>
+<span class="source-line-no">3208</span><span id="line-3208">  public BalanceRSGroupResponse balanceRSGroup(RpcController controller,</span>
+<span class="source-line-no">3209</span><span id="line-3209">    BalanceRSGroupRequest request) throws ServiceException {</span>
+<span class="source-line-no">3210</span><span id="line-3210">    BalanceRequest balanceRequest = ProtobufUtil.toBalanceRequest(request);</span>
+<span class="source-line-no">3211</span><span id="line-3211"></span>
+<span class="source-line-no">3212</span><span id="line-3212">    BalanceRSGroupResponse.Builder builder =</span>
+<span class="source-line-no">3213</span><span id="line-3213">      BalanceRSGroupResponse.newBuilder().setBalanceRan(false);</span>
+<span class="source-line-no">3214</span><span id="line-3214"></span>
+<span class="source-line-no">3215</span><span id="line-3215">    LOG.info(</span>
+<span class="source-line-no">3216</span><span id="line-3216">      server.getClientIdAuditPrefix() + " balance rsgroup, group=" + request.getRSGroupName());</span>
+<span class="source-line-no">3217</span><span id="line-3217">    try {</span>
+<span class="source-line-no">3218</span><span id="line-3218">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3219</span><span id="line-3219">        server.getMasterCoprocessorHost().preBalanceRSGroup(request.getRSGroupName(),</span>
+<span class="source-line-no">3220</span><span id="line-3220">          balanceRequest);</span>
+<span class="source-line-no">3221</span><span id="line-3221">      }</span>
+<span class="source-line-no">3222</span><span id="line-3222">      BalanceResponse response =</span>
+<span class="source-line-no">3223</span><span id="line-3223">        server.getRSGroupInfoManager().balanceRSGroup(request.getRSGroupName(), balanceRequest);</span>
+<span class="source-line-no">3224</span><span id="line-3224">      ProtobufUtil.populateBalanceRSGroupResponse(builder, response);</span>
+<span class="source-line-no">3225</span><span id="line-3225">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3226</span><span id="line-3226">        server.getMasterCoprocessorHost().postBalanceRSGroup(request.getRSGroupName(),</span>
+<span class="source-line-no">3227</span><span id="line-3227">          balanceRequest, response);</span>
+<span class="source-line-no">3228</span><span id="line-3228">      }</span>
+<span class="source-line-no">3229</span><span id="line-3229">    } catch (IOException e) {</span>
+<span class="source-line-no">3230</span><span id="line-3230">      throw new ServiceException(e);</span>
+<span class="source-line-no">3231</span><span id="line-3231">    }</span>
+<span class="source-line-no">3232</span><span id="line-3232">    return builder.build();</span>
+<span class="source-line-no">3233</span><span id="line-3233">  }</span>
+<span class="source-line-no">3234</span><span id="line-3234"></span>
+<span class="source-line-no">3235</span><span id="line-3235">  @Override</span>
+<span class="source-line-no">3236</span><span id="line-3236">  public ListRSGroupInfosResponse listRSGroupInfos(RpcController controller,</span>
+<span class="source-line-no">3237</span><span id="line-3237">    ListRSGroupInfosRequest request) throws ServiceException {</span>
+<span class="source-line-no">3238</span><span id="line-3238">    ListRSGroupInfosResponse.Builder builder = ListRSGroupInfosResponse.newBuilder();</span>
+<span class="source-line-no">3239</span><span id="line-3239">    LOG.info(server.getClientIdAuditPrefix() + " list rsgroup");</span>
+<span class="source-line-no">3240</span><span id="line-3240">    try {</span>
+<span class="source-line-no">3241</span><span id="line-3241">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3242</span><span id="line-3242">        server.getMasterCoprocessorHost().preListRSGroups();</span>
+<span class="source-line-no">3243</span><span id="line-3243">      }</span>
+<span class="source-line-no">3244</span><span id="line-3244">      List&lt;RSGroupInfo&gt; rsGroupInfos = server.getRSGroupInfoManager().listRSGroups().stream()</span>
+<span class="source-line-no">3245</span><span id="line-3245">        .map(RSGroupInfo::new).collect(Collectors.toList());</span>
+<span class="source-line-no">3246</span><span id="line-3246">      Map&lt;String, RSGroupInfo&gt; name2Info = new HashMap&lt;&gt;();</span>
+<span class="source-line-no">3247</span><span id="line-3247">      List&lt;TableDescriptor&gt; needToFill =</span>
+<span class="source-line-no">3248</span><span id="line-3248">        new ArrayList&lt;&gt;(server.getTableDescriptors().getAll().values());</span>
+<span class="source-line-no">3249</span><span id="line-3249">      for (RSGroupInfo rsGroupInfo : rsGroupInfos) {</span>
+<span class="source-line-no">3250</span><span id="line-3250">        name2Info.put(rsGroupInfo.getName(), rsGroupInfo);</span>
+<span class="source-line-no">3251</span><span id="line-3251">        for (TableDescriptor td : server.getTableDescriptors().getAll().values()) {</span>
+<span class="source-line-no">3252</span><span id="line-3252">          if (rsGroupInfo.containsTable(td.getTableName())) {</span>
+<span class="source-line-no">3253</span><span id="line-3253">            needToFill.remove(td);</span>
+<span class="source-line-no">3254</span><span id="line-3254">          }</span>
+<span class="source-line-no">3255</span><span id="line-3255">        }</span>
+<span class="source-line-no">3256</span><span id="line-3256">      }</span>
+<span class="source-line-no">3257</span><span id="line-3257">      for (TableDescriptor td : needToFill) {</span>
+<span class="source-line-no">3258</span><span id="line-3258">        String groupName = td.getRegionServerGroup().orElse(RSGroupInfo.DEFAULT_GROUP);</span>
+<span class="source-line-no">3259</span><span id="line-3259">        RSGroupInfo rsGroupInfo = name2Info.get(groupName);</span>
+<span class="source-line-no">3260</span><span id="line-3260">        if (rsGroupInfo != null) {</span>
+<span class="source-line-no">3261</span><span id="line-3261">          rsGroupInfo.addTable(td.getTableName());</span>
+<span class="source-line-no">3262</span><span id="line-3262">        }</span>
+<span class="source-line-no">3263</span><span id="line-3263">      }</span>
+<span class="source-line-no">3264</span><span id="line-3264">      for (RSGroupInfo rsGroupInfo : rsGroupInfos) {</span>
+<span class="source-line-no">3265</span><span id="line-3265">        // TODO: this can be done at once outside this loop, do not need to scan all every time.</span>
+<span class="source-line-no">3266</span><span id="line-3266">        builder.addRSGroupInfo(ProtobufUtil.toProtoGroupInfo(rsGroupInfo));</span>
+<span class="source-line-no">3267</span><span id="line-3267">      }</span>
+<span class="source-line-no">3268</span><span id="line-3268">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3269</span><span id="line-3269">        server.getMasterCoprocessorHost().postListRSGroups();</span>
+<span class="source-line-no">3270</span><span id="line-3270">      }</span>
+<span class="source-line-no">3271</span><span id="line-3271">    } catch (IOException e) {</span>
+<span class="source-line-no">3272</span><span id="line-3272">      throw new ServiceException(e);</span>
+<span class="source-line-no">3273</span><span id="line-3273">    }</span>
+<span class="source-line-no">3274</span><span id="line-3274">    return builder.build();</span>
+<span class="source-line-no">3275</span><span id="line-3275">  }</span>
+<span class="source-line-no">3276</span><span id="line-3276"></span>
+<span class="source-line-no">3277</span><span id="line-3277">  @Override</span>
+<span class="source-line-no">3278</span><span id="line-3278">  public RemoveServersResponse removeServers(RpcController controller, RemoveServersRequest request)</span>
+<span class="source-line-no">3279</span><span id="line-3279">    throws ServiceException {</span>
+<span class="source-line-no">3280</span><span id="line-3280">    RemoveServersResponse.Builder builder = RemoveServersResponse.newBuilder();</span>
+<span class="source-line-no">3281</span><span id="line-3281">    Set&lt;Address&gt; servers = Sets.newHashSet();</span>
+<span class="source-line-no">3282</span><span id="line-3282">    for (HBaseProtos.ServerName el : request.getServersList()) {</span>
+<span class="source-line-no">3283</span><span id="line-3283">      servers.add(Address.fromParts(el.getHostName(), el.getPort()));</span>
+<span class="source-line-no">3284</span><span id="line-3284">    }</span>
+<span class="source-line-no">3285</span><span id="line-3285">    LOG.info(</span>
+<span class="source-line-no">3286</span><span id="line-3286">      server.getClientIdAuditPrefix() + " remove decommissioned servers from rsgroup: " + servers);</span>
+<span class="source-line-no">3287</span><span id="line-3287">    try {</span>
+<span class="source-line-no">3288</span><span id="line-3288">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3289</span><span id="line-3289">        server.getMasterCoprocessorHost().preRemoveServers(servers);</span>
+<span class="source-line-no">3290</span><span id="line-3290">      }</span>
+<span class="source-line-no">3291</span><span id="line-3291">      server.getRSGroupInfoManager().removeServers(servers);</span>
+<span class="source-line-no">3292</span><span id="line-3292">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3293</span><span id="line-3293">        server.getMasterCoprocessorHost().postRemoveServers(servers);</span>
+<span class="source-line-no">3294</span><span id="line-3294">      }</span>
+<span class="source-line-no">3295</span><span id="line-3295">    } catch (IOException e) {</span>
+<span class="source-line-no">3296</span><span id="line-3296">      throw new ServiceException(e);</span>
+<span class="source-line-no">3297</span><span id="line-3297">    }</span>
+<span class="source-line-no">3298</span><span id="line-3298">    return builder.build();</span>
+<span class="source-line-no">3299</span><span id="line-3299">  }</span>
+<span class="source-line-no">3300</span><span id="line-3300"></span>
+<span class="source-line-no">3301</span><span id="line-3301">  @Override</span>
+<span class="source-line-no">3302</span><span id="line-3302">  public ListTablesInRSGroupResponse listTablesInRSGroup(RpcController controller,</span>
+<span class="source-line-no">3303</span><span id="line-3303">    ListTablesInRSGroupRequest request) throws ServiceException {</span>
+<span class="source-line-no">3304</span><span id="line-3304">    ListTablesInRSGroupResponse.Builder builder = ListTablesInRSGroupResponse.newBuilder();</span>
+<span class="source-line-no">3305</span><span id="line-3305">    String groupName = request.getGroupName();</span>
+<span class="source-line-no">3306</span><span id="line-3306">    LOG.info(server.getClientIdAuditPrefix() + " list tables in rsgroup " + groupName);</span>
+<span class="source-line-no">3307</span><span id="line-3307">    try {</span>
+<span class="source-line-no">3308</span><span id="line-3308">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3309</span><span id="line-3309">        server.getMasterCoprocessorHost().preListTablesInRSGroup(groupName);</span>
+<span class="source-line-no">3310</span><span id="line-3310">      }</span>
+<span class="source-line-no">3311</span><span id="line-3311">      RSGroupUtil.listTablesInRSGroup(server, groupName).stream()</span>
+<span class="source-line-no">3312</span><span id="line-3312">        .map(ProtobufUtil::toProtoTableName).forEach(builder::addTableName);</span>
+<span class="source-line-no">3313</span><span id="line-3313">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3314</span><span id="line-3314">        server.getMasterCoprocessorHost().postListTablesInRSGroup(groupName);</span>
+<span class="source-line-no">3315</span><span id="line-3315">      }</span>
+<span class="source-line-no">3316</span><span id="line-3316">    } catch (IOException e) {</span>
+<span class="source-line-no">3317</span><span id="line-3317">      throw new ServiceException(e);</span>
+<span class="source-line-no">3318</span><span id="line-3318">    }</span>
+<span class="source-line-no">3319</span><span id="line-3319">    return builder.build();</span>
+<span class="source-line-no">3320</span><span id="line-3320">  }</span>
+<span class="source-line-no">3321</span><span id="line-3321"></span>
+<span class="source-line-no">3322</span><span id="line-3322">  @Override</span>
+<span class="source-line-no">3323</span><span id="line-3323">  public GetConfiguredNamespacesAndTablesInRSGroupResponse</span>
+<span class="source-line-no">3324</span><span id="line-3324">    getConfiguredNamespacesAndTablesInRSGroup(RpcController controller,</span>
+<span class="source-line-no">3325</span><span id="line-3325">      GetConfiguredNamespacesAndTablesInRSGroupRequest request) throws ServiceException {</span>
+<span class="source-line-no">3326</span><span id="line-3326">    GetConfiguredNamespacesAndTablesInRSGroupResponse.Builder builder =</span>
+<span class="source-line-no">3327</span><span id="line-3327">      GetConfiguredNamespacesAndTablesInRSGroupResponse.newBuilder();</span>
+<span class="source-line-no">3328</span><span id="line-3328">    String groupName = request.getGroupName();</span>
+<span class="source-line-no">3329</span><span id="line-3329">    LOG.info(server.getClientIdAuditPrefix() + " get configured namespaces and tables in rsgroup "</span>
+<span class="source-line-no">3330</span><span id="line-3330">      + groupName);</span>
+<span class="source-line-no">3331</span><span id="line-3331">    try {</span>
+<span class="source-line-no">3332</span><span id="line-3332">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3333</span><span id="line-3333">        server.getMasterCoprocessorHost().preGetConfiguredNamespacesAndTablesInRSGroup(groupName);</span>
+<span class="source-line-no">3334</span><span id="line-3334">      }</span>
+<span class="source-line-no">3335</span><span id="line-3335">      for (NamespaceDescriptor nd : server.getClusterSchema().getNamespaces()) {</span>
+<span class="source-line-no">3336</span><span id="line-3336">        if (groupName.equals(nd.getConfigurationValue(RSGroupInfo.NAMESPACE_DESC_PROP_GROUP))) {</span>
+<span class="source-line-no">3337</span><span id="line-3337">          builder.addNamespace(nd.getName());</span>
+<span class="source-line-no">3338</span><span id="line-3338">        }</span>
+<span class="source-line-no">3339</span><span id="line-3339">      }</span>
+<span class="source-line-no">3340</span><span id="line-3340">      for (TableDescriptor td : server.getTableDescriptors().getAll().values()) {</span>
+<span class="source-line-no">3341</span><span id="line-3341">        if (td.getRegionServerGroup().map(g -&gt; g.equals(groupName)).orElse(false)) {</span>
+<span class="source-line-no">3342</span><span id="line-3342">          builder.addTableName(ProtobufUtil.toProtoTableName(td.getTableName()));</span>
+<span class="source-line-no">3343</span><span id="line-3343">        }</span>
+<span class="source-line-no">3344</span><span id="line-3344">      }</span>
+<span class="source-line-no">3345</span><span id="line-3345">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3346</span><span id="line-3346">        server.getMasterCoprocessorHost().postGetConfiguredNamespacesAndTablesInRSGroup(groupName);</span>
+<span class="source-line-no">3347</span><span id="line-3347">      }</span>
+<span class="source-line-no">3348</span><span id="line-3348">    } catch (IOException e) {</span>
+<span class="source-line-no">3349</span><span id="line-3349">      throw new ServiceException(e);</span>
+<span class="source-line-no">3350</span><span id="line-3350">    }</span>
+<span class="source-line-no">3351</span><span id="line-3351">    return builder.build();</span>
+<span class="source-line-no">3352</span><span id="line-3352">  }</span>
+<span class="source-line-no">3353</span><span id="line-3353"></span>
+<span class="source-line-no">3354</span><span id="line-3354">  @Override</span>
+<span class="source-line-no">3355</span><span id="line-3355">  public RenameRSGroupResponse renameRSGroup(RpcController controller, RenameRSGroupRequest request)</span>
+<span class="source-line-no">3356</span><span id="line-3356">    throws ServiceException {</span>
+<span class="source-line-no">3357</span><span id="line-3357">    RenameRSGroupResponse.Builder builder = RenameRSGroupResponse.newBuilder();</span>
+<span class="source-line-no">3358</span><span id="line-3358">    String oldRSGroup = request.getOldRsgroupName();</span>
+<span class="source-line-no">3359</span><span id="line-3359">    String newRSGroup = request.getNewRsgroupName();</span>
+<span class="source-line-no">3360</span><span id="line-3360">    LOG.info("{} rename rsgroup from {} to {} ", server.getClientIdAuditPrefix(), oldRSGroup,</span>
+<span class="source-line-no">3361</span><span id="line-3361">      newRSGroup);</span>
+<span class="source-line-no">3362</span><span id="line-3362">    try {</span>
+<span class="source-line-no">3363</span><span id="line-3363">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3364</span><span id="line-3364">        server.getMasterCoprocessorHost().preRenameRSGroup(oldRSGroup, newRSGroup);</span>
+<span class="source-line-no">3365</span><span id="line-3365">      }</span>
+<span class="source-line-no">3366</span><span id="line-3366">      server.getRSGroupInfoManager().renameRSGroup(oldRSGroup, newRSGroup);</span>
+<span class="source-line-no">3367</span><span id="line-3367">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3368</span><span id="line-3368">        server.getMasterCoprocessorHost().postRenameRSGroup(oldRSGroup, newRSGroup);</span>
+<span class="source-line-no">3369</span><span id="line-3369">      }</span>
+<span class="source-line-no">3370</span><span id="line-3370">    } catch (IOException e) {</span>
+<span class="source-line-no">3371</span><span id="line-3371">      throw new ServiceException(e);</span>
+<span class="source-line-no">3372</span><span id="line-3372">    }</span>
+<span class="source-line-no">3373</span><span id="line-3373">    return builder.build();</span>
+<span class="source-line-no">3374</span><span id="line-3374">  }</span>
+<span class="source-line-no">3375</span><span id="line-3375"></span>
+<span class="source-line-no">3376</span><span id="line-3376">  @Override</span>
+<span class="source-line-no">3377</span><span id="line-3377">  public UpdateRSGroupConfigResponse updateRSGroupConfig(RpcController controller,</span>
+<span class="source-line-no">3378</span><span id="line-3378">    UpdateRSGroupConfigRequest request) throws ServiceException {</span>
+<span class="source-line-no">3379</span><span id="line-3379">    UpdateRSGroupConfigResponse.Builder builder = UpdateRSGroupConfigResponse.newBuilder();</span>
+<span class="source-line-no">3380</span><span id="line-3380">    String groupName = request.getGroupName();</span>
+<span class="source-line-no">3381</span><span id="line-3381">    Map&lt;String, String&gt; configuration = new HashMap&lt;&gt;();</span>
+<span class="source-line-no">3382</span><span id="line-3382">    request.getConfigurationList().forEach(p -&gt; configuration.put(p.getName(), p.getValue()));</span>
+<span class="source-line-no">3383</span><span id="line-3383">    LOG.info("{} update rsgroup {} configuration {}", server.getClientIdAuditPrefix(), groupName,</span>
+<span class="source-line-no">3384</span><span id="line-3384">      configuration);</span>
+<span class="source-line-no">3385</span><span id="line-3385">    try {</span>
+<span class="source-line-no">3386</span><span id="line-3386">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3387</span><span id="line-3387">        server.getMasterCoprocessorHost().preUpdateRSGroupConfig(groupName, configuration);</span>
+<span class="source-line-no">3388</span><span id="line-3388">      }</span>
+<span class="source-line-no">3389</span><span id="line-3389">      server.getRSGroupInfoManager().updateRSGroupConfig(groupName, configuration);</span>
+<span class="source-line-no">3390</span><span id="line-3390">      if (server.getMasterCoprocessorHost() != null) {</span>
+<span class="source-line-no">3391</span><span id="line-3391">        server.getMasterCoprocessorHost().postUpdateRSGroupConfig(groupName, configuration);</span>
+<span class="source-line-no">3392</span><span id="line-3392">      }</span>
+<span class="source-line-no">3393</span><span id="line-3393">    } catch (IOException e) {</span>
+<span class="source-line-no">3394</span><span id="line-3394">      throw new ServiceException(e);</span>
+<span class="source-line-no">3395</span><span id="line-3395">    }</span>
+<span class="source-line-no">3396</span><span id="line-3396">    return builder.build();</span>
+<span class="source-line-no">3397</span><span id="line-3397">  }</span>
+<span class="source-line-no">3398</span><span id="line-3398"></span>
+<span class="source-line-no">3399</span><span id="line-3399">  @Override</span>
+<span class="source-line-no">3400</span><span id="line-3400">  public HBaseProtos.LogEntry getLogEntries(RpcController controller,</span>
+<span class="source-line-no">3401</span><span id="line-3401">    HBaseProtos.LogRequest request) throws ServiceException {</span>
+<span class="source-line-no">3402</span><span id="line-3402">    try {</span>
+<span class="source-line-no">3403</span><span id="line-3403">      final String logClassName = request.getLogClassName();</span>
+<span class="source-line-no">3404</span><span id="line-3404">      Class&lt;?&gt; logClass = Class.forName(logClassName).asSubclass(Message.class);</span>
+<span class="source-line-no">3405</span><span id="line-3405">      Method method = logClass.getMethod("parseFrom", ByteString.class);</span>
+<span class="source-line-no">3406</span><span id="line-3406">      if (logClassName.contains("BalancerDecisionsRequest")) {</span>
+<span class="source-line-no">3407</span><span id="line-3407">        MasterProtos.BalancerDecisionsRequest balancerDecisionsRequest =</span>
+<span class="source-line-no">3408</span><span id="line-3408">          (MasterProtos.BalancerDecisionsRequest) method.invoke(null, request.getLogMessage());</span>
+<span class="source-line-no">3409</span><span id="line-3409">        MasterProtos.BalancerDecisionsResponse balancerDecisionsResponse =</span>
+<span class="source-line-no">3410</span><span id="line-3410">          getBalancerDecisions(balancerDecisionsRequest);</span>
+<span class="source-line-no">3411</span><span id="line-3411">        return HBaseProtos.LogEntry.newBuilder()</span>
+<span class="source-line-no">3412</span><span id="line-3412">          .setLogClassName(balancerDecisionsResponse.getClass().getName())</span>
+<span class="source-line-no">3413</span><span id="line-3413">          .setLogMessage(balancerDecisionsResponse.toByteString()).build();</span>
+<span class="source-line-no">3414</span><span id="line-3414">      } else if (logClassName.contains("BalancerRejectionsRequest")) {</span>
+<span class="source-line-no">3415</span><span id="line-3415">        MasterProtos.BalancerRejectionsRequest balancerRejectionsRequest =</span>
+<span class="source-line-no">3416</span><span id="line-3416">          (MasterProtos.BalancerRejectionsRequest) method.invoke(null, request.getLogMessage());</span>
+<span class="source-line-no">3417</span><span id="line-3417">        MasterProtos.BalancerRejectionsResponse balancerRejectionsResponse =</span>
+<span class="source-line-no">3418</span><span id="line-3418">          getBalancerRejections(balancerRejectionsRequest);</span>
+<span class="source-line-no">3419</span><span id="line-3419">        return HBaseProtos.LogEntry.newBuilder()</span>
+<span class="source-line-no">3420</span><span id="line-3420">          .setLogClassName(balancerRejectionsResponse.getClass().getName())</span>
+<span class="source-line-no">3421</span><span id="line-3421">          .setLogMessage(balancerRejectionsResponse.toByteString()).build();</span>
+<span class="source-line-no">3422</span><span id="line-3422">      }</span>
+<span class="source-line-no">3423</span><span id="line-3423">    } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException</span>
+<span class="source-line-no">3424</span><span id="line-3424">      | InvocationTargetException e) {</span>
+<span class="source-line-no">3425</span><span id="line-3425">      LOG.error("Error while retrieving log entries.", e);</span>
+<span class="source-line-no">3426</span><span id="line-3426">      throw new ServiceException(e);</span>
+<span class="source-line-no">3427</span><span id="line-3427">    }</span>
+<span class="source-line-no">3428</span><span id="line-3428">    throw new ServiceException("Invalid request params");</span>
+<span class="source-line-no">3429</span><span id="line-3429">  }</span>
+<span class="source-line-no">3430</span><span id="line-3430"></span>
+<span class="source-line-no">3431</span><span id="line-3431">  private MasterProtos.BalancerDecisionsResponse</span>
+<span class="source-line-no">3432</span><span id="line-3432">    getBalancerDecisions(MasterProtos.BalancerDecisionsRequest request) {</span>
+<span class="source-line-no">3433</span><span id="line-3433">    final NamedQueueRecorder namedQueueRecorder = this.server.getNamedQueueRecorder();</span>
+<span class="source-line-no">3434</span><span id="line-3434">    if (namedQueueRecorder == null) {</span>
+<span class="source-line-no">3435</span><span id="line-3435">      return MasterProtos.BalancerDecisionsResponse.newBuilder()</span>
+<span class="source-line-no">3436</span><span id="line-3436">        .addAllBalancerDecision(Collections.emptyList()).build();</span>
+<span class="source-line-no">3437</span><span id="line-3437">    }</span>
+<span class="source-line-no">3438</span><span id="line-3438">    final NamedQueueGetRequest namedQueueGetRequest = new NamedQueueGetRequest();</span>
+<span class="source-line-no">3439</span><span id="line-3439">    namedQueueGetRequest.setNamedQueueEvent(BalancerDecisionDetails.BALANCER_DECISION_EVENT);</span>
+<span class="source-line-no">3440</span><span id="line-3440">    namedQueueGetRequest.setBalancerDecisionsRequest(request);</span>
+<span class="source-line-no">3441</span><span id="line-3441">    NamedQueueGetResponse namedQueueGetResponse =</span>
+<span class="source-line-no">3442</span><span id="line-3442">      namedQueueRecorder.getNamedQueueRecords(namedQueueGetRequest);</span>
+<span class="source-line-no">3443</span><span id="line-3443">    List&lt;RecentLogs.BalancerDecision&gt; balancerDecisions = namedQueueGetResponse != null</span>
+<span class="source-line-no">3444</span><span id="line-3444">      ? namedQueueGetResponse.getBalancerDecisions()</span>
+<span class="source-line-no">3445</span><span id="line-3445">      : Collections.emptyList();</span>
+<span class="source-line-no">3446</span><span id="line-3446">    return MasterProtos.BalancerDecisionsResponse.newBuilder()</span>
+<span class="source-line-no">3447</span><span id="line-3447">      .addAllBalancerDecision(balancerDecisions).build();</span>
+<span class="source-line-no">3448</span><span id="line-3448">  }</span>
+<span class="source-line-no">3449</span><span id="line-3449"></span>
+<span class="source-line-no">3450</span><span id="line-3450">  private MasterProtos.BalancerRejectionsResponse</span>
+<span class="source-line-no">3451</span><span id="line-3451">    getBalancerRejections(MasterProtos.BalancerRejectionsRequest request) {</span>
+<span class="source-line-no">3452</span><span id="line-3452">    final NamedQueueRecorder namedQueueRecorder = this.server.getNamedQueueRecorder();</span>
+<span class="source-line-no">3453</span><span id="line-3453">    if (namedQueueRecorder == null) {</span>
+<span class="source-line-no">3454</span><span id="line-3454">      return MasterProtos.BalancerRejectionsResponse.newBuilder()</span>
+<span class="source-line-no">3455</span><span id="line-3455">        .addAllBalancerRejection(Collections.emptyList()).build();</span>
+<span class="source-line-no">3456</span><span id="line-3456">    }</span>
+<span class="source-line-no">3457</span><span id="line-3457">    final NamedQueueGetRequest namedQueueGetRequest = new NamedQueueGetRequest();</span>
+<span class="source-line-no">3458</span><span id="line-3458">    namedQueueGetRequest.setNamedQueueEvent(BalancerRejectionDetails.BALANCER_REJECTION_EVENT);</span>
+<span class="source-line-no">3459</span><span id="line-3459">    namedQueueGetRequest.setBalancerRejectionsRequest(request);</span>
+<span class="source-line-no">3460</span><span id="line-3460">    NamedQueueGetResponse namedQueueGetResponse =</span>
+<span class="source-line-no">3461</span><span id="line-3461">      namedQueueRecorder.getNamedQueueRecords(namedQueueGetRequest);</span>
+<span class="source-line-no">3462</span><span id="line-3462">    List&lt;RecentLogs.BalancerRejection&gt; balancerRejections = namedQueueGetResponse != null</span>
+<span class="source-line-no">3463</span><span id="line-3463">      ? namedQueueGetResponse.getBalancerRejections()</span>
+<span class="source-line-no">3464</span><span id="line-3464">      : Collections.emptyList();</span>
+<span class="source-line-no">3465</span><span id="line-3465">    return MasterProtos.BalancerRejectionsResponse.newBuilder()</span>
+<span class="source-line-no">3466</span><span id="line-3466">      .addAllBalancerRejection(balancerRejections).build();</span>
+<span class="source-line-no">3467</span><span id="line-3467">  }</span>
+<span class="source-line-no">3468</span><span id="line-3468"></span>
+<span class="source-line-no">3469</span><span id="line-3469">  @Override</span>
+<span class="source-line-no">3470</span><span id="line-3470">  @QosPriority(priority = HConstants.ADMIN_QOS)</span>
+<span class="source-line-no">3471</span><span id="line-3471">  public GetRegionInfoResponse getRegionInfo(final RpcController controller,</span>
+<span class="source-line-no">3472</span><span id="line-3472">    final GetRegionInfoRequest request) throws ServiceException {</span>
+<span class="source-line-no">3473</span><span id="line-3473">    final GetRegionInfoResponse.Builder builder = GetRegionInfoResponse.newBuilder();</span>
+<span class="source-line-no">3474</span><span id="line-3474">    final RegionInfo info = getRegionInfo(request.getRegion());</span>
+<span class="source-line-no">3475</span><span id="line-3475">    if (info != null) {</span>
+<span class="source-line-no">3476</span><span id="line-3476">      builder.setRegionInfo(ProtobufUtil.toRegionInfo(info));</span>
+<span class="source-line-no">3477</span><span id="line-3477">    } else {</span>
+<span class="source-line-no">3478</span><span id="line-3478">      // Is it a MOB name? These work differently.</span>
+<span class="source-line-no">3479</span><span id="line-3479">      byte[] regionName = request.getRegion().getValue().toByteArray();</span>
+<span class="source-line-no">3480</span><span id="line-3480">      TableName tableName = RegionInfo.getTable(regionName);</span>
+<span class="source-line-no">3481</span><span id="line-3481">      if (MobUtils.isMobRegionName(tableName, regionName)) {</span>
+<span class="source-line-no">3482</span><span id="line-3482">        // a dummy region info contains the compaction state.</span>
+<span class="source-line-no">3483</span><span id="line-3483">        RegionInfo mobRegionInfo = MobUtils.getMobRegionInfo(tableName);</span>
+<span class="source-line-no">3484</span><span id="line-3484">        builder.setRegionInfo(ProtobufUtil.toRegionInfo(mobRegionInfo));</span>
+<span class="source-line-no">3485</span><span id="line-3485">        if (request.hasCompactionState() &amp;&amp; request.getCompactionState()) {</span>
+<span class="source-line-no">3486</span><span id="line-3486">          builder.setCompactionState(server.getMobCompactionState(tableName));</span>
+<span class="source-line-no">3487</span><span id="line-3487">        }</span>
+<span class="source-line-no">3488</span><span id="line-3488">      } else {</span>
+<span class="source-line-no">3489</span><span id="line-3489">        // If unknown RegionInfo and not a MOB region, it is unknown.</span>
+<span class="source-line-no">3490</span><span id="line-3490">        throw new ServiceException(new UnknownRegionException(Bytes.toString(regionName)));</span>
+<span class="source-line-no">3491</span><span id="line-3491">      }</span>
+<span class="source-line-no">3492</span><span id="line-3492">    }</span>
+<span class="source-line-no">3493</span><span id="line-3493">    return builder.build();</span>
+<span class="source-line-no">3494</span><span id="line-3494">  }</span>
+<span class="source-line-no">3495</span><span id="line-3495"></span>
+<span class="source-line-no">3496</span><span id="line-3496">  @Override</span>
+<span class="source-line-no">3497</span><span id="line-3497">  public GetStoreFileResponse getStoreFile(RpcController controller, GetStoreFileRequest request)</span>
+<span class="source-line-no">3498</span><span id="line-3498">    throws ServiceException {</span>
+<span class="source-line-no">3499</span><span id="line-3499">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3500</span><span id="line-3500">  }</span>
+<span class="source-line-no">3501</span><span id="line-3501"></span>
+<span class="source-line-no">3502</span><span id="line-3502">  @Override</span>
+<span class="source-line-no">3503</span><span id="line-3503">  public GetOnlineRegionResponse getOnlineRegion(RpcController controller,</span>
+<span class="source-line-no">3504</span><span id="line-3504">    GetOnlineRegionRequest request) throws ServiceException {</span>
+<span class="source-line-no">3505</span><span id="line-3505">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3506</span><span id="line-3506">  }</span>
+<span class="source-line-no">3507</span><span id="line-3507"></span>
+<span class="source-line-no">3508</span><span id="line-3508">  @Override</span>
+<span class="source-line-no">3509</span><span id="line-3509">  public OpenRegionResponse openRegion(RpcController controller, OpenRegionRequest request)</span>
+<span class="source-line-no">3510</span><span id="line-3510">    throws ServiceException {</span>
+<span class="source-line-no">3511</span><span id="line-3511">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3512</span><span id="line-3512">  }</span>
+<span class="source-line-no">3513</span><span id="line-3513"></span>
+<span class="source-line-no">3514</span><span id="line-3514">  @Override</span>
+<span class="source-line-no">3515</span><span id="line-3515">  public WarmupRegionResponse warmupRegion(RpcController controller, WarmupRegionRequest request)</span>
+<span class="source-line-no">3516</span><span id="line-3516">    throws ServiceException {</span>
+<span class="source-line-no">3517</span><span id="line-3517">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3518</span><span id="line-3518">  }</span>
+<span class="source-line-no">3519</span><span id="line-3519"></span>
+<span class="source-line-no">3520</span><span id="line-3520">  @Override</span>
+<span class="source-line-no">3521</span><span id="line-3521">  public CloseRegionResponse closeRegion(RpcController controller, CloseRegionRequest request)</span>
+<span class="source-line-no">3522</span><span id="line-3522">    throws ServiceException {</span>
+<span class="source-line-no">3523</span><span id="line-3523">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3524</span><span id="line-3524">  }</span>
+<span class="source-line-no">3525</span><span id="line-3525"></span>
+<span class="source-line-no">3526</span><span id="line-3526">  @Override</span>
+<span class="source-line-no">3527</span><span id="line-3527">  public FlushRegionResponse flushRegion(RpcController controller, FlushRegionRequest request)</span>
+<span class="source-line-no">3528</span><span id="line-3528">    throws ServiceException {</span>
+<span class="source-line-no">3529</span><span id="line-3529">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3530</span><span id="line-3530">  }</span>
+<span class="source-line-no">3531</span><span id="line-3531"></span>
+<span class="source-line-no">3532</span><span id="line-3532">  @Override</span>
+<span class="source-line-no">3533</span><span id="line-3533">  public CompactionSwitchResponse compactionSwitch(RpcController controller,</span>
+<span class="source-line-no">3534</span><span id="line-3534">    CompactionSwitchRequest request) throws ServiceException {</span>
+<span class="source-line-no">3535</span><span id="line-3535">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3536</span><span id="line-3536">  }</span>
+<span class="source-line-no">3537</span><span id="line-3537"></span>
+<span class="source-line-no">3538</span><span id="line-3538">  @Override</span>
+<span class="source-line-no">3539</span><span id="line-3539">  public CompactRegionResponse compactRegion(RpcController controller, CompactRegionRequest request)</span>
+<span class="source-line-no">3540</span><span id="line-3540">    throws ServiceException {</span>
+<span class="source-line-no">3541</span><span id="line-3541">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3542</span><span id="line-3542">  }</span>
+<span class="source-line-no">3543</span><span id="line-3543"></span>
+<span class="source-line-no">3544</span><span id="line-3544">  @Override</span>
+<span class="source-line-no">3545</span><span id="line-3545">  public ReplicateWALEntryResponse replicateWALEntry(RpcController controller,</span>
+<span class="source-line-no">3546</span><span id="line-3546">    ReplicateWALEntryRequest request) throws ServiceException {</span>
+<span class="source-line-no">3547</span><span id="line-3547">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3548</span><span id="line-3548">  }</span>
+<span class="source-line-no">3549</span><span id="line-3549"></span>
+<span class="source-line-no">3550</span><span id="line-3550">  @Override</span>
+<span class="source-line-no">3551</span><span id="line-3551">  public ReplicateWALEntryResponse replay(RpcController controller,</span>
+<span class="source-line-no">3552</span><span id="line-3552">    ReplicateWALEntryRequest request) throws ServiceException {</span>
+<span class="source-line-no">3553</span><span id="line-3553">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3554</span><span id="line-3554">  }</span>
+<span class="source-line-no">3555</span><span id="line-3555"></span>
+<span class="source-line-no">3556</span><span id="line-3556">  @Override</span>
+<span class="source-line-no">3557</span><span id="line-3557">  public RollWALWriterResponse rollWALWriter(RpcController controller, RollWALWriterRequest request)</span>
+<span class="source-line-no">3558</span><span id="line-3558">    throws ServiceException {</span>
+<span class="source-line-no">3559</span><span id="line-3559">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3560</span><span id="line-3560">  }</span>
+<span class="source-line-no">3561</span><span id="line-3561"></span>
+<span class="source-line-no">3562</span><span id="line-3562">  @Override</span>
+<span class="source-line-no">3563</span><span id="line-3563">  public GetServerInfoResponse getServerInfo(RpcController controller, GetServerInfoRequest request)</span>
+<span class="source-line-no">3564</span><span id="line-3564">    throws ServiceException {</span>
+<span class="source-line-no">3565</span><span id="line-3565">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3566</span><span id="line-3566">  }</span>
+<span class="source-line-no">3567</span><span id="line-3567"></span>
+<span class="source-line-no">3568</span><span id="line-3568">  @Override</span>
+<span class="source-line-no">3569</span><span id="line-3569">  public StopServerResponse stopServer(RpcController controller, StopServerRequest request)</span>
+<span class="source-line-no">3570</span><span id="line-3570">    throws ServiceException {</span>
+<span class="source-line-no">3571</span><span id="line-3571">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3572</span><span id="line-3572">  }</span>
+<span class="source-line-no">3573</span><span id="line-3573"></span>
+<span class="source-line-no">3574</span><span id="line-3574">  @Override</span>
+<span class="source-line-no">3575</span><span id="line-3575">  public UpdateFavoredNodesResponse updateFavoredNodes(RpcController controller,</span>
+<span class="source-line-no">3576</span><span id="line-3576">    UpdateFavoredNodesRequest request) throws ServiceException {</span>
+<span class="source-line-no">3577</span><span id="line-3577">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3578</span><span id="line-3578">  }</span>
+<span class="source-line-no">3579</span><span id="line-3579"></span>
+<span class="source-line-no">3580</span><span id="line-3580">  @Override</span>
+<span class="source-line-no">3581</span><span id="line-3581">  public GetRegionLoadResponse getRegionLoad(RpcController controller, GetRegionLoadRequest request)</span>
+<span class="source-line-no">3582</span><span id="line-3582">    throws ServiceException {</span>
+<span class="source-line-no">3583</span><span id="line-3583">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3584</span><span id="line-3584">  }</span>
+<span class="source-line-no">3585</span><span id="line-3585"></span>
+<span class="source-line-no">3586</span><span id="line-3586">  @Override</span>
+<span class="source-line-no">3587</span><span id="line-3587">  public ClearCompactionQueuesResponse clearCompactionQueues(RpcController controller,</span>
+<span class="source-line-no">3588</span><span id="line-3588">    ClearCompactionQueuesRequest request) throws ServiceException {</span>
+<span class="source-line-no">3589</span><span id="line-3589">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3590</span><span id="line-3590">  }</span>
+<span class="source-line-no">3591</span><span id="line-3591"></span>
+<span class="source-line-no">3592</span><span id="line-3592">  @Override</span>
+<span class="source-line-no">3593</span><span id="line-3593">  public ClearRegionBlockCacheResponse clearRegionBlockCache(RpcController controller,</span>
+<span class="source-line-no">3594</span><span id="line-3594">    ClearRegionBlockCacheRequest request) throws ServiceException {</span>
+<span class="source-line-no">3595</span><span id="line-3595">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3596</span><span id="line-3596">  }</span>
+<span class="source-line-no">3597</span><span id="line-3597"></span>
+<span class="source-line-no">3598</span><span id="line-3598">  @Override</span>
+<span class="source-line-no">3599</span><span id="line-3599">  public GetSpaceQuotaSnapshotsResponse getSpaceQuotaSnapshots(RpcController controller,</span>
+<span class="source-line-no">3600</span><span id="line-3600">    GetSpaceQuotaSnapshotsRequest request) throws ServiceException {</span>
+<span class="source-line-no">3601</span><span id="line-3601">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3602</span><span id="line-3602">  }</span>
+<span class="source-line-no">3603</span><span id="line-3603"></span>
+<span class="source-line-no">3604</span><span id="line-3604">  @Override</span>
+<span class="source-line-no">3605</span><span id="line-3605">  public ExecuteProceduresResponse executeProcedures(RpcController controller,</span>
+<span class="source-line-no">3606</span><span id="line-3606">    ExecuteProceduresRequest request) throws ServiceException {</span>
+<span class="source-line-no">3607</span><span id="line-3607">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3608</span><span id="line-3608">  }</span>
+<span class="source-line-no">3609</span><span id="line-3609"></span>
+<span class="source-line-no">3610</span><span id="line-3610">  @Override</span>
+<span class="source-line-no">3611</span><span id="line-3611">  public GetCachedFilesListResponse getCachedFilesList(RpcController controller,</span>
+<span class="source-line-no">3612</span><span id="line-3612">    GetCachedFilesListRequest request) throws ServiceException {</span>
+<span class="source-line-no">3613</span><span id="line-3613">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3614</span><span id="line-3614">  }</span>
+<span class="source-line-no">3615</span><span id="line-3615"></span>
+<span class="source-line-no">3616</span><span id="line-3616">  @Override</span>
+<span class="source-line-no">3617</span><span id="line-3617">  public GetLiveRegionServersResponse getLiveRegionServers(RpcController controller,</span>
+<span class="source-line-no">3618</span><span id="line-3618">    GetLiveRegionServersRequest request) throws ServiceException {</span>
+<span class="source-line-no">3619</span><span id="line-3619">    List&lt;ServerName&gt; regionServers = new ArrayList&lt;&gt;(server.getLiveRegionServers());</span>
+<span class="source-line-no">3620</span><span id="line-3620">    Collections.shuffle(regionServers, ThreadLocalRandom.current());</span>
+<span class="source-line-no">3621</span><span id="line-3621">    GetLiveRegionServersResponse.Builder builder =</span>
+<span class="source-line-no">3622</span><span id="line-3622">      GetLiveRegionServersResponse.newBuilder().setTotal(regionServers.size());</span>
+<span class="source-line-no">3623</span><span id="line-3623">    regionServers.stream().limit(request.getCount()).map(ProtobufUtil::toServerName)</span>
+<span class="source-line-no">3624</span><span id="line-3624">      .forEach(builder::addServer);</span>
+<span class="source-line-no">3625</span><span id="line-3625">    return builder.build();</span>
+<span class="source-line-no">3626</span><span id="line-3626">  }</span>
+<span class="source-line-no">3627</span><span id="line-3627"></span>
+<span class="source-line-no">3628</span><span id="line-3628">  @Override</span>
+<span class="source-line-no">3629</span><span id="line-3629">  public ReplicateWALEntryResponse replicateToReplica(RpcController controller,</span>
+<span class="source-line-no">3630</span><span id="line-3630">    ReplicateWALEntryRequest request) throws ServiceException {</span>
+<span class="source-line-no">3631</span><span id="line-3631">    throw new ServiceException(new DoNotRetryIOException("Unsupported method on master"));</span>
+<span class="source-line-no">3632</span><span id="line-3632">  }</span>
+<span class="source-line-no">3633</span><span id="line-3633"></span>
+<span class="source-line-no">3634</span><span id="line-3634">  @Override</span>
+<span class="source-line-no">3635</span><span id="line-3635">  public FlushMasterStoreResponse flushMasterStore(RpcController controller,</span>
+<span class="source-line-no">3636</span><span id="line-3636">    FlushMasterStoreRequest request) throws ServiceException {</span>
+<span class="source-line-no">3637</span><span id="line-3637">    rpcPreCheck("flushMasterStore");</span>
+<span class="source-line-no">3638</span><span id="line-3638">    try {</span>
+<span class="source-line-no">3639</span><span id="line-3639">      server.flushMasterStore();</span>
+<span class="source-line-no">3640</span><span id="line-3640">    } catch (IOException ioe) {</span>
+<span class="source-line-no">3641</span><span id="line-3641">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">3642</span><span id="line-3642">    }</span>
+<span class="source-line-no">3643</span><span id="line-3643">    return FlushMasterStoreResponse.newBuilder().build();</span>
+<span class="source-line-no">3644</span><span id="line-3644">  }</span>
+<span class="source-line-no">3645</span><span id="line-3645"></span>
+<span class="source-line-no">3646</span><span id="line-3646">  @Override</span>
+<span class="source-line-no">3647</span><span id="line-3647">  public FlushTableResponse flushTable(RpcController controller, FlushTableRequest req)</span>
+<span class="source-line-no">3648</span><span id="line-3648">    throws ServiceException {</span>
+<span class="source-line-no">3649</span><span id="line-3649">    TableName tableName = ProtobufUtil.toTableName(req.getTableName());</span>
+<span class="source-line-no">3650</span><span id="line-3650">    List&lt;byte[]&gt; columnFamilies = req.getColumnFamilyCount() &gt; 0</span>
+<span class="source-line-no">3651</span><span id="line-3651">      ? req.getColumnFamilyList().stream().filter(cf -&gt; !cf.isEmpty()).map(ByteString::toByteArray)</span>
+<span class="source-line-no">3652</span><span id="line-3652">        .collect(Collectors.toList())</span>
+<span class="source-line-no">3653</span><span id="line-3653">      : null;</span>
+<span class="source-line-no">3654</span><span id="line-3654">    try {</span>
+<span class="source-line-no">3655</span><span id="line-3655">      long procId =</span>
+<span class="source-line-no">3656</span><span id="line-3656">        server.flushTable(tableName, columnFamilies, req.getNonceGroup(), req.getNonce());</span>
+<span class="source-line-no">3657</span><span id="line-3657">      return FlushTableResponse.newBuilder().setProcId(procId).build();</span>
+<span class="source-line-no">3658</span><span id="line-3658">    } catch (IOException ioe) {</span>
+<span class="source-line-no">3659</span><span id="line-3659">      throw new ServiceException(ioe);</span>
+<span class="source-line-no">3660</span><span id="line-3660">    }</span>
+<span class="source-line-no">3661</span><span id="line-3661">  }</span>
+<span class="source-line-no">3662</span><span id="line-3662">}</span>
 
 
 
diff --git a/book.html b/book.html
index 02da5ef1d68..5fbe2cd38bc 100644
--- a/book.html
+++ b/book.html
@@ -49831,7 +49831,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 4.0.0-alpha-1-SNAPSHOT<br>
-Last updated 2025-05-17 14:29:59 UTC
+Last updated 2025-05-19 14:31:57 UTC
 </div>
 </div>
 <script type="text/x-mathjax-config">
diff --git a/bulk-loads.html b/bulk-loads.html
index e7f9a1a9659..229b435cbb9 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -185,7 +185,7 @@
         All other marks mentioned may be trademarks or registered trademarks of their respective owners.
       </div>
       <div style="float: right">
-        Last Published: 2025-05-17
+        Last Published: 2025-05-19
       </div>
         </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 219fade07ff..da31a1ac3b7 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -3250,7 +3250,7 @@
 <tr class="b">
 <td>annotation</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_annotation.html#MissingDeprecated">MissingDeprecated</a></td>
-<td>12</td>
+<td>9</td>
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td></tr>
 <tr class="a">
 <td>blocks</td>
@@ -3324,20 +3324,27 @@
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td></tr>
 <tr class="a">
 <td>javadoc</td>
+<td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#JavadocTagContinuationIndentation">JavadocTagContinuationIndentation</a>
+<ul>
+<li>offset: <code>&quot;2&quot;</code></li></ul></td>
+<td>3</td>
+<td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td></tr>
+<tr class="b">
+<td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_javadoc.html#NonEmptyAtclauseDescription">NonEmptyAtclauseDescription</a></td>
 <td>46</td>
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>misc</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#ArrayTypeStyle">ArrayTypeStyle</a></td>
 <td>110</td>
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_misc.html#UpperEll">UpperEll</a></td>
 <td>23</td>
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>sizes</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#LineLength">LineLength</a>
 <ul>
@@ -3345,12 +3352,12 @@
 <li>ignorePattern: <code>&quot;^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated&quot;</code></li></ul></td>
 <td>141</td>
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td></tr>
-<tr class="a">
+<tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_sizes.html#MethodLength">MethodLength</a></td>
 <td>61</td>
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td></tr>
-<tr class="b">
+<tr class="a">
 <td>whitespace</td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_whitespace.html#FileTabCharacter">FileTabCharacter</a></td>
 <td>1</td>
@@ -3358,19 +3365,19 @@
 <h2><a name="Details"></a>Details</h2><section>
 <h3 id="log4j2.properties">log4j2.properties</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>65</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -3378,49 +3385,49 @@
 <td>65</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.AcidGuaranteesTestTool.java">org/apache/hadoop/hbase/AcidGuaranteesTestTool.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>141</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>165</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>217</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>218</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>284</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>285</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -3428,13 +3435,13 @@
 <td>339</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.CatalogFamilyFormat.java">org/apache/hadoop/hbase/CatalogFamilyFormat.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -3442,49 +3449,49 @@
 <td>81</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.CellUtil.java">org/apache/hadoop/hbase/CellUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>328</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>337</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>401</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>512</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>622</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>706</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3492,19 +3499,19 @@
 <td>839</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.CompoundConfiguration.java">org/apache/hadoop/hbase/CompoundConfiguration.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>172</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3512,19 +3519,19 @@
 <td>174</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.DistributedHBaseCluster.java">org/apache/hadoop/hbase/DistributedHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>526</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3532,13 +3539,13 @@
 <td>528</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.HBaseConfiguration.java">org/apache/hadoop/hbase/HBaseConfiguration.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3546,85 +3553,85 @@
 <td>42</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.HBaseTestingUtil.java">org/apache/hadoop/hbase/HBaseTestingUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>342</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>479</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>483</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>992</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1207</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2004</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>3060</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3360</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3362</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3393</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3433</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3632,121 +3639,121 @@
 <td>3435</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.HBaseTestingUtility.java">org/apache/hadoop/hbase/HBaseTestingUtility.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>336</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>473</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>477</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>488</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>573</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>588</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>604</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>604</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>1231</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1446</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2253</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>3378</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>3503</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3810</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3812</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3845</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>3886</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3754,13 +3761,13 @@
 <td>3888</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.HTestConst.java">org/apache/hadoop/hbase/HTestConst.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -3768,13 +3775,13 @@
 <td>36</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.IntegrationTestDDLMasterFailover.java">org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3782,19 +3789,19 @@
 <td>902</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.IntegrationTestManyRegions.java">org/apache/hadoop/hbase/IntegrationTestManyRegions.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>88</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3802,19 +3809,19 @@
 <td>99</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.IntegrationTestMetaReplicas.java">org/apache/hadoop/hbase/IntegrationTestMetaReplicas.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
 <td>87</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3822,43 +3829,43 @@
 <td>89</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.IntegrationTestRegionReplicaPerf.java">org/apache/hadoop/hbase/IntegrationTestRegionReplicaPerf.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>68</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>121</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>145</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>147</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>282</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
@@ -3866,13 +3873,13 @@
 <td>297</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.KeyValueTestUtil.java">org/apache/hadoop/hbase/KeyValueTestUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -3880,25 +3887,25 @@
 <td>31</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.KeyValueUtil.java">org/apache/hadoop/hbase/KeyValueUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>419</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3906,19 +3913,19 @@
 <td>710</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.LocalHBaseCluster.java">org/apache/hadoop/hbase/LocalHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>263</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3926,13 +3933,13 @@
 <td>264</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.MetaMockingUtil.java">org/apache/hadoop/hbase/MetaMockingUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -3940,19 +3947,19 @@
 <td>31</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.MiniHBaseCluster.java">org/apache/hadoop/hbase/MiniHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'hbaseCluster' must be private and have accessor methods.</td>
 <td>59</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -3960,19 +3967,19 @@
 <td>624</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.MultithreadedTestUtil.java">org/apache/hadoop/hbase/MultithreadedTestUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>68</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -3980,19 +3987,19 @@
 <td>83</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.NamespaceDescriptor.java">org/apache/hadoop/hbase/NamespaceDescriptor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class NamespaceDescriptor should be declared as final.</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -4000,193 +4007,193 @@
 <td>159</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.PerformanceEvaluation.java">org/apache/hadoop/hbase/PerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'duration' must be private and have accessor methods.</td>
 <td>238</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'hist' must be private and have accessor methods.</td>
 <td>239</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'numbOfReplyOverThreshold' must be private and have accessor methods.</td>
 <td>240</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'numOfReplyFromReplica' must be private and have accessor methods.</td>
 <td>241</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>465</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>607</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
 <td>608</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>755</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>755</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>755</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1222</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>1223</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1232</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1239</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1248</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1253</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1410</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1412</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1573</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>1834</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>1882</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>1991</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
 <td>Should use uppercase 'L'.</td>
 <td>2228</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>2392</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>2504</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2662</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2663</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>2772</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 314 lines (max allowed is 150).</td>
 <td>2813</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4194,13 +4201,13 @@
 <td>2977</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.PerformanceEvaluationCommons.java">org/apache/hadoop/hbase/PerformanceEvaluationCommons.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -4208,25 +4215,25 @@
 <td>31</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.PrivateCellUtil.java">org/apache/hadoop/hbase/PrivateCellUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2587</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>2745</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4234,25 +4241,25 @@
 <td>2758</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.RegionLocations.java">org/apache/hadoop/hbase/RegionLocations.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>144</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>145</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4260,13 +4267,13 @@
 <td>147</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.ScanPerformanceEvaluation.java">org/apache/hadoop/hbase/ScanPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -4274,13 +4281,13 @@
 <td>80</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.SplitLogCounters.java">org/apache/hadoop/hbase/SplitLogCounters.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -4288,13 +4295,13 @@
 <td>46</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.SplitLogTask.java">org/apache/hadoop/hbase/SplitLogTask.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4302,19 +4309,19 @@
 <td>135</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.StripeCompactionsPerformanceEvaluation.java">org/apache/hadoop/hbase/StripeCompactionsPerformanceEvaluation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>121</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4322,19 +4329,19 @@
 <td>144</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TableName.java">org/apache/hadoop/hbase/TableName.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>529</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4342,13 +4349,13 @@
 <td>530</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TagBuilderFactory.java">org/apache/hadoop/hbase/TagBuilderFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -4356,13 +4363,13 @@
 <td>25</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TagType.java">org/apache/hadoop/hbase/TagType.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -4370,13 +4377,13 @@
 <td>23</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TestClientClusterStatus.java">org/apache/hadoop/hbase/TestClientClusterStatus.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4384,13 +4391,13 @@
 <td>176</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TestGlobalMemStoreSize.java">org/apache/hadoop/hbase/TestGlobalMemStoreSize.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4398,19 +4405,19 @@
 <td>175</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TestIOFencing.java">org/apache/hadoop/hbase/TestIOFencing.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>91</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -4418,13 +4425,13 @@
 <td>319</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TestLocalHBaseCluster.java">org/apache/hadoop/hbase/TestLocalHBaseCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>imports</td>
 <td>AvoidStarImport</td>
@@ -4432,19 +4439,19 @@
 <td>20</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TestMetaTableAccessor.java">org/apache/hadoop/hbase/TestMetaTableAccessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>229</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4452,13 +4459,13 @@
 <td>230</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TestNodeHealthCheckChore.java">org/apache/hadoop/hbase/TestNodeHealthCheckChore.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4466,43 +4473,43 @@
 <td>61</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TestPartialResultsFromClientSide.java">org/apache/hadoop/hbase/TestPartialResultsFromClientSide.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>332</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>641</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>662</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>668</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4510,19 +4517,19 @@
 <td>669</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TestRegionRebalancing.java">org/apache/hadoop/hbase/TestRegionRebalancing.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4530,19 +4537,19 @@
 <td>232</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.TimestampTestBase.java">org/apache/hadoop/hbase/TimestampTestBase.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>37</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
@@ -4550,13 +4557,13 @@
 <td>190</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.ZNodeClearer.java">org/apache/hadoop/hbase/ZNodeClearer.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4564,13 +4571,13 @@
 <td>110</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.backup.BackupTestUtil.java">org/apache/hadoop/hbase/backup/BackupTestUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -4578,25 +4585,25 @@
 <td>30</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.backup.HFileArchiver.java">org/apache/hadoop/hbase/backup/HFileArchiver.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
 <td>Class HFileArchiver should be declared as final.</td>
 <td>66</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4604,13 +4611,13 @@
 <td>809</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.backup.TestIncrementalBackup.java">org/apache/hadoop/hbase/backup/TestIncrementalBackup.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -4618,13 +4625,13 @@
 <td>134</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.chaos.ChaosConstants.java">org/apache/hadoop/hbase/chaos/ChaosConstants.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -4632,19 +4639,19 @@
 <td>25</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.chaos.ChaosService.java">org/apache/hadoop/hbase/chaos/ChaosService.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4652,13 +4659,13 @@
 <td>122</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.chaos.ChaosUtils.java">org/apache/hadoop/hbase/chaos/ChaosUtils.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -4666,13 +4673,13 @@
 <td>29</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.chaos.factories.MonkeyConstants.java">org/apache/hadoop/hbase/chaos/factories/MonkeyConstants.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>InterfaceIsType</td>
@@ -4680,13 +4687,13 @@
 <td>25</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.chaos.policies.PeriodicPolicy.java">org/apache/hadoop/hbase/chaos/policies/PeriodicPolicy.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4694,27 +4701,27 @@
 <td>43</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.chaos.util.ChaosMonkeyRunner.java">org/apache/hadoop/hbase/chaos/util/ChaosMonkeyRunner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
-<td>annotation</td>
-<td>MissingDeprecated</td>
+<td>javadoc</td>
+<td>JavadocTagContinuationIndentation</td>
 <td>Javadoc comment at column 20 has parse error. Missed HTML close tag 'path-to-conf'. Sometimes it means that close tag missed for one of previous tags.</td>
 <td>172</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.Action.java">org/apache/hadoop/hbase/client/Action.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4722,25 +4729,25 @@
 <td>94</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.Admin.java">org/apache/hadoop/hbase/client/Admin.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
 <td>739</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
 <td>750</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -4748,25 +4755,25 @@
 <td>776</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.AsyncBatchRpcRetryingCaller.java">org/apache/hadoop/hbase/client/AsyncBatchRpcRetryingCaller.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'loc' must be private and have accessor methods.</td>
 <td>123</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'actions' must be private and have accessor methods.</td>
 <td>125</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -4774,31 +4781,31 @@
 <td>134</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.AsyncClientScanner.java">org/apache/hadoop/hbase/client/AsyncClientScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'loc' must be private and have accessor methods.</td>
 <td>143</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'stub' must be private and have accessor methods.</td>
 <td>147</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'controller' must be private and have accessor methods.</td>
 <td>149</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -4806,13 +4813,13 @@
 <td>151</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.AsyncTableImpl.java">org/apache/hadoop/hbase/client/AsyncTableImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -4820,13 +4827,13 @@
 <td>251</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.ClientInternalHelper.java">org/apache/hadoop/hbase/client/ClientInternalHelper.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -4834,13 +4841,13 @@
 <td>34</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.ClientUtil.java">org/apache/hadoop/hbase/client/ClientUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -4848,13 +4855,13 @@
 <td>25</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.ColumnFamilyDescriptorBuilder.java">org/apache/hadoop/hbase/client/ColumnFamilyDescriptorBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -4862,13 +4869,13 @@
 <td>46</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.HConnectionTestingUtility.java">org/apache/hadoop/hbase/client/HConnectionTestingUtility.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -4876,25 +4883,25 @@
 <td>27</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.Mutation.java">org/apache/hadoop/hbase/client/Mutation.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>352</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>371</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4902,13 +4909,13 @@
 <td>381</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.Query.java">org/apache/hadoop/hbase/client/Query.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4916,25 +4923,25 @@
 <td>80</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.RegionInfo.java">org/apache/hadoop/hbase/client/RegionInfo.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>346</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -4942,13 +4949,13 @@
 <td>368</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.RegionInfoBuilder.java">org/apache/hadoop/hbase/client/RegionInfoBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -4956,43 +4963,43 @@
 <td>25</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.RegionInfoDisplay.java">org/apache/hadoop/hbase/client/RegionInfoDisplay.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
 <td>Utility classes should not have a public or default constructor.</td>
 <td>31</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>43</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>57</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>67</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>107</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5000,13 +5007,13 @@
 <td>108</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.RegionReplicaUtil.java">org/apache/hadoop/hbase/client/RegionReplicaUtil.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -5014,13 +5021,13 @@
 <td>30</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.RequestControllerFactory.java">org/apache/hadoop/hbase/client/RequestControllerFactory.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -5028,13 +5035,13 @@
 <td>27</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.ResultScanner.java">org/apache/hadoop/hbase/client/ResultScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -5042,13 +5049,13 @@
 <td>51</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException.java">org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5056,13 +5063,13 @@
 <td>145</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.SnapshotDescription.java">org/apache/hadoop/hbase/client/SnapshotDescription.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -5070,13 +5077,13 @@
 <td>67</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TableDescriptorBuilder.java">org/apache/hadoop/hbase/client/TableDescriptorBuilder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>FinalClass</td>
@@ -5084,13 +5091,13 @@
 <td>58</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TableState.java">org/apache/hadoop/hbase/client/TableState.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5098,13 +5105,13 @@
 <td>165</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestAdmin.java">org/apache/hadoop/hbase/client/TestAdmin.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -5112,19 +5119,19 @@
 <td>174</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncRegionAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncRegionAdminApi.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'for' construct must use '{}'s.</td>
 <td>286</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5132,13 +5139,13 @@
 <td>293</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncReplicationAdminApi.java">org/apache/hadoop/hbase/client/TestAsyncReplicationAdminApi.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>EmptyStatement</td>
@@ -5146,19 +5153,19 @@
 <td>451</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncTableScanMetrics.java">org/apache/hadoop/hbase/client/TestAsyncTableScanMetrics.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
 <td>118</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -5166,13 +5173,13 @@
 <td>136</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestAsyncTableScanner.java">org/apache/hadoop/hbase/client/TestAsyncTableScanner.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -5180,25 +5187,25 @@
 <td>92</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestAvoidCellReferencesIntoShippedBlocks.java">org/apache/hadoop/hbase/client/TestAvoidCellReferencesIntoShippedBlocks.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>101</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
@@ -5206,31 +5213,31 @@
 <td>248</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestBlockEvictionFromClient.java">org/apache/hadoop/hbase/client/TestBlockEvictionFromClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
 <td>139</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -5238,19 +5245,19 @@
 <td>149</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestFromClientSide3.java">org/apache/hadoop/hbase/client/TestFromClientSide3.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -5258,19 +5265,19 @@
 <td>119</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestFromClientSideNoCodec.java">org/apache/hadoop/hbase/client/TestFromClientSideNoCodec.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -5278,13 +5285,13 @@
 <td>68</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestImmutableScan.java">org/apache/hadoop/hbase/client/TestImmutableScan.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
@@ -5292,13 +5299,13 @@
 <td>118</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestIncrementsFromClientSide.java">org/apache/hadoop/hbase/client/TestIncrementsFromClientSide.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -5306,163 +5313,163 @@
 <td>98</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestMultipleTimestamps.java">org/apache/hadoop/hbase/client/TestMultipleTimestamps.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>201</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>316</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>346</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>371</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>396</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>431</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>432</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>444</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>445</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>448</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>461</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>465</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>479</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>480</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>497</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>498</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>509</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>517</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>518</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -5470,19 +5477,19 @@
 <td>525</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestPutWithDelete.java">org/apache/hadoop/hbase/client/TestPutWithDelete.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -5490,13 +5497,13 @@
 <td>59</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestRawAsyncTableScan.java">org/apache/hadoop/hbase/client/TestRawAsyncTableScan.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -5504,13 +5511,13 @@
 <td>85</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestReplicaWithCluster.java">org/apache/hadoop/hbase/client/TestReplicaWithCluster.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5518,13 +5525,13 @@
 <td>271</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestReplicasClient.java">org/apache/hadoop/hbase/client/TestReplicasClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5532,25 +5539,25 @@
 <td>259</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestScannerTimeout.java">org/apache/hadoop/hbase/client/TestScannerTimeout.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
@@ -5558,13 +5565,13 @@
 <td>91</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestScannersFromClientSide2.java">org/apache/hadoop/hbase/client/TestScannersFromClientSide2.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -5572,91 +5579,91 @@
 <td>134</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.TestTimestampsFilter.java">org/apache/hadoop/hbase/client/TestTimestampsFilter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>252</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>315</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>316</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>333</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>334</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>348</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>349</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>366</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -5664,13 +5671,13 @@
 <td>367</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.coprocessor.AggregationClient.java">org/apache/hadoop/hbase/client/coprocessor/AggregationClient.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -5678,19 +5685,19 @@
 <td>195</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.coprocessor.Batch.java">org/apache/hadoop/hbase/client/coprocessor/Batch.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 103).</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -5698,19 +5705,19 @@
 <td>53</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.coprocessor.DoubleColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/DoubleColumnInterpreter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>46</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5718,31 +5725,31 @@
 <td>62</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.coprocessor.LongColumnInterpreter.java">org/apache/hadoop/hbase/client/coprocessor/LongColumnInterpreter.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#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><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>UpperEll</td>
@@ -5750,55 +5757,55 @@
 <td>74</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.coprocessor.package-info.java">org/apache/hadoop/hbase/client/coprocessor/package-info.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 146).</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 200).</td>
 <td>55</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 144).</td>
 <td>75</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 206).</td>
 <td>76</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 111).</td>
 <td>95</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 105).</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 124).</td>
 <td>149</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -5806,13 +5813,13 @@
 <td>190</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.locking.EntityLock.java">org/apache/hadoop/hbase/client/locking/EntityLock.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5820,61 +5827,61 @@
 <td>125</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.client.metrics.ScanMetrics.java">org/apache/hadoop/hbase/client/metrics/ScanMetrics.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'countOfRPCcalls' must be private and have accessor methods.</td>
 <td>54</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'countOfRemoteRPCcalls' must be private and have accessor methods.</td>
 <td>59</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'sumOfMillisSecBetweenNexts' must be private and have accessor methods.</td>
 <td>64</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'countOfNSRE' must be private and have accessor methods.</td>
 <td>70</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'countOfBytesInResults' must be private and have accessor methods.</td>
 <td>75</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'countOfBytesInRemoteResults' must be private and have accessor methods.</td>
 <td>80</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'countOfRegions' must be private and have accessor methods.</td>
 <td>86</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'countOfRPCRetries' must be private and have accessor methods.</td>
 <td>91</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -5882,13 +5889,13 @@
 <td>96</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.codec.BaseDecoder.java">org/apache/hadoop/hbase/codec/BaseDecoder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5896,19 +5903,19 @@
 <td>82</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.codec.BaseEncoder.java">org/apache/hadoop/hbase/codec/BaseEncoder.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5916,13 +5923,13 @@
 <td>53</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.codec.CodecPerformance.java">org/apache/hadoop/hbase/codec/CodecPerformance.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -5930,19 +5937,19 @@
 <td>40</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.constraint.CheckConfigurationConstraint.java">org/apache/hadoop/hbase/constraint/CheckConfigurationConstraint.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>47</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -5950,25 +5957,25 @@
 <td>51</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.constraint.Constraint.java">org/apache/hadoop/hbase/constraint/Constraint.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 119).</td>
 <td>30</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
 <td>35</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -5976,37 +5983,37 @@
 <td>37</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.constraint.package-info.java">org/apache/hadoop/hbase/constraint/package-info.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 120).</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 121).</td>
 <td>45</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 127).</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 155).</td>
 <td>64</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -6014,19 +6021,19 @@
 <td>66</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coordination.ZKSplitLogManagerCoordination.java">org/apache/hadoop/hbase/coordination/ZKSplitLogManagerCoordination.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'ignoreZKDeleteForTesting' must be private and have accessor methods.</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
@@ -6034,19 +6041,19 @@
 <td>447</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coordination.ZkSplitLogWorkerCoordination.java">org/apache/hadoop/hbase/coordination/ZkSplitLogWorkerCoordination.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>154</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -6054,13 +6061,13 @@
 <td>218</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.BaseEnvironment.java">org/apache/hadoop/hbase/coprocessor/BaseEnvironment.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>VisibilityModifier</td>
@@ -6068,19 +6075,19 @@
 <td>37</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.CoprocessorHost.java">org/apache/hadoop/hbase/coprocessor/CoprocessorHost.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
 <td>134</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -6088,13 +6095,13 @@
 <td>663</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.MetricsCoprocessor.java">org/apache/hadoop/hbase/coprocessor/MetricsCoprocessor.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>design</td>
 <td>HideUtilityClassConstructor</td>
@@ -6102,13 +6109,13 @@
 <td>30</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.ObserverContextImpl.java">org/apache/hadoop/hbase/coprocessor/ObserverContextImpl.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>annotation</td>
 <td>MissingDeprecated</td>
@@ -6116,31 +6123,31 @@
 <td>98</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.RegionObserver.java">org/apache/hadoop/hbase/coprocessor/RegionObserver.java</h3>
 <table border="0" class="table table-striped">
-<tr class="b">
+<tr class="a">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>686</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>716</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
 <td>846</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -6148,13 +6155,13 @@
 <td>876</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.TestCoprocessorInterface.java">org/apache/hadoop/hbase/coprocessor/TestCoprocessorInterface.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
@@ -6162,37 +6169,37 @@
 <td>346</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.TestRegionObserverInterface.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverInterface.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>499</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>525</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>EmptyBlock</td>
 <td>Must have at least one statement.</td>
 <td>562</td></tr>
-<tr class="a">
+<tr class="b">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
 <td>Array brackets at illegal position.</td>
 <td>880</td></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>misc</td>
 <td>ArrayTypeStyle</td>
@@ -6200,13 +6207,13 @@
 <td>881</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.TestRegionObserverPreFlushAndPreCompact.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverPreFlushAndPreCompact.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -6214,13 +6221,13 @@
 <td>53</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.TestRegionObserverScannerOpenHook.java">org/apache/hadoop/hbase/coprocessor/TestRegionObserverScannerOpenHook.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -6228,13 +6235,13 @@
 <td>302</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.coprocessor.package-info.java">org/apache/hadoop/hbase/coprocessor/package-info.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
@@ -6242,13 +6249,13 @@
 <td>209</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.errorhandling.ForeignException.java">org/apache/hadoop/hbase/errorhandling/ForeignException.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -6256,13 +6263,13 @@
 <td>99</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.errorhandling.ForeignExceptionDispatcher.java">org/apache/hadoop/hbase/errorhandling/ForeignExceptionDispatcher.java</h3>
 <table border="0" class="table table-striped">
-<tr class="a">
+<tr class="b">
 <th>Severity</th>
 <th>Category</th>
 <th>Rule</th>
 <th>Message</th>
 <th>Line</th></tr>
-<tr class="b">
+<tr class="a">
 <td><figure><img src="images/icon_error_sml.gif" alt="" /></figure>&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
@@ -6270,13 +6277,13 @@
 <td>62</td></tr></table></section><section>
 <h3 id="org.apache.hadoop.hbase.errorhandling.TimeoutExceptionInjector.java">org/apache/hadoop/hbase/errorhandling/TimeoutExceptionInjector.java</h3>
 <table border="0" class="table table-striped">
... 33065 lines suppressed ...