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> </dd>
<dt>affixShutdownHook(Thread, int) - Static method in class org.apache.hadoop.hbase.util.ShutdownHookManager</dt>
<dd> </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> </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> </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> </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> </dd>
<dt>conf - Variable in class org.apache.hadoop.hbase.regionserver.StoreFileReader</dt>
<dd> </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> </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<KeyValueScanner>, FlushLifeCycleTracker) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
+<dt>createScanner(List<KeyValueScanner>, 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<Path>) - Method in class org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher</dt>
+<dt>createWriter(MemStoreSnapshot, boolean, Consumer<Path>) - Method in class org.apache.hadoop.hbase.regionserver.StripeStoreFlusher</dt>
<dd> </dd>
<dt>createWriterInstance(FileSystem, Path) - Method in class org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL</dt>
<dd> </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> </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> </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> </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> </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> </dd>
<dt>finalizeWriter(StoreFileWriter, long, MonitoredTask) - Method in class org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher</dt>
<dd> </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> </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>
</dd>
<dt>START_TIME_KEY - Static variable in class org.apache.hadoop.hbase.mapreduce.WALInputFormat</dt>
<dd> </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> </dd>
<dt>startBlockEncoding(HFileBlockEncodingContext, DataOutputStream) - Method in class org.apache.hadoop.hbase.io.encoding.CopyKeyDataBlockEncoder</dt>
<dd> </dd>
@@ -68372,7 +68372,7 @@ service.</div>
</dd>
<dt>store - Variable in class org.apache.hadoop.hbase.io.crypto.KeyStoreKeyProvider</dt>
<dd> </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> </dd>
<dt>store - Variable in class org.apache.hadoop.hbase.regionserver.StoreScanner</dt>
<dd> </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 controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.GetLastFlushedSequenceIdRequest request)</code></div>
-<div class="col-last even-row-color"> </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 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 controller,
org.apache.hadoop.hbase.shaded.protobuf.generated.AdminProtos.GetRegionInfoRequest request)</code></div>
-<div class="col-last odd-row-color"> </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 controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerReportRequest request)</code></div>
-<div class="col-last even-row-color"> </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 controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionServerStartupRequest request)</code></div>
-<div class="col-last odd-row-color"> </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 controller,
- org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.ReportRSFatalErrorRequest request)</code></div>
<div class="col-last even-row-color"> </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 <region>/<column</span>
-<span class="source-line-no">176</span><span id="line-176"> * family>/<hfile>. 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 -> {</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 <region>/<column</span>
+<span class="source-line-no">179</span><span id="line-179"> * family>/<hfile>. 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 -> {</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() && 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() && 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 < 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) -> {</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<SnapshotDescription> 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<Integer, Integer> 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<TableName> tableNameList = null;</span>
-<span class="source-line-no">1180</span><span id="line-1180"> if (req.getTableNamesCount() > 0) {</span>
-<span class="source-line-no">1181</span><span id="line-1181"> tableNameList = new ArrayList<TableName>(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<TableDescriptor> 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 && descriptors.size() > 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<TableDescriptor> 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 && descriptors.size() > 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<TableName> 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 && tableNames.size() > 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<TableName> 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 && tableNames.size() > 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<?> executor = server.getMasterProcedureExecutor();</span>
-<span class="source-line-no">1383</span><span id="line-1383"> Procedure<?> 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<?> 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"> * <p></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"> * <p></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"> * <p></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() && 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 <code>true</code> to enable, <code>false</code> to disable</span>
-<span class="source-line-no">1686</span><span id="line-1686"> * @param synchronous If <code>true</code>, 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<Boolean> fileCleanerFuture = server.getHFileCleaner().triggerCleanerNow();</span>
-<span class="source-line-no">1716</span><span id="line-1716"> CompletableFuture<Boolean> logCleanerFuture = server.getLogCleaner().triggerCleanerNow();</span>
-<span class="source-line-no">1717</span><span id="line-1717"> boolean result = fileCleanerFuture.get() && 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 < 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) -> {</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<SnapshotDescription> 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<Integer, Integer> 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<TableName> tableNameList = null;</span>
+<span class="source-line-no">1178</span><span id="line-1178"> if (req.getTableNamesCount() > 0) {</span>
+<span class="source-line-no">1179</span><span id="line-1179"> tableNameList = new ArrayList<TableName>(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<TableDescriptor> 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 && descriptors.size() > 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<TableDescriptor> 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 && descriptors.size() > 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<TableName> 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 && tableNames.size() > 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<TableName> 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 && tableNames.size() > 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<?> executor = server.getMasterProcedureExecutor();</span>
+<span class="source-line-no">1381</span><span id="line-1381"> Procedure<?> 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<?> 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"> * <p></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"> * <p></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"> * <p></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() && 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 <code>true</code> to enable, <code>false</code> to disable</span>
+<span class="source-line-no">1684</span><span id="line-1684"> * @param synchronous If <code>true</code>, 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<Boolean> fileCleanerFuture = server.getHFileCleaner().triggerCleanerNow();</span>
+<span class="source-line-no">1714</span><span id="line-1714"> CompletableFuture<Boolean> logCleanerFuture = server.getLogCleaner().triggerCleanerNow();</span>
+<span class="source-line-no">1715</span><span id="line-1715"> boolean result = fileCleanerFuture.get() && 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() && request.hasNonce()</span>
-<span class="source-line-no">1779</span><span id="line-1779"> && 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() > 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<SecurityCapabilitiesResponse.Capability> capabilities = new HashSet<>();</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 && 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 && 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<MasterCoprocessor> coprocessorsToCheck,</span>
-<span class="source-line-no">2070</span><span id="line-2070"> Class<?> 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<ReplicationPeerDescription> 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<?> 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<ServerName> servers = server.listDecommissionedRegionServers();</span>
-<span class="source-line-no">2272</span><span id="line-2272"> response.addAllServerName((servers.stream().map(server -> 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<ServerName> servers = request.getServerNameList().stream()</span>
-<span class="source-line-no">2290</span><span id="line-2290"> .map(pbServer -> 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<byte[]> encodedRegionNames = request.getRegionList().stream()</span>
-<span class="source-line-no">2313</span><span id="line-2313"> .map(regionSpecifier -> 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() > 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 < 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<RegionInfo, Long> regionSizes = quotaManager.snapshotRegionSizes();</span>
-<span class="source-line-no">2456</span><span id="line-2456"> Map<TableName, Long> regionSizesByTable = new HashMap<>();</span>
-<span class="source-line-no">2457</span><span id="line-2457"> // Translate hregioninfo+long -> tablename+long</span>
-<span class="source-line-no">2458</span><span id="line-2458"> for (Entry<RegionInfo, Long> 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<TableName, Long> 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<TableName, SpaceQuotaSnapshot> tableSnapshots = quotaChore.getTableQuotaSnapshots();</span>
-<span class="source-line-no">2493</span><span id="line-2493"> for (Entry<TableName, SpaceQuotaSnapshot> 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<String, SpaceQuotaSnapshot> nsSnapshots = quotaChore.getNamespaceQuotaSnapshots();</span>
-<span class="source-line-no">2500</span><span id="line-2500"> for (Entry<String, SpaceQuotaSnapshot> 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<Address> clearedServers = new HashSet<>();</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 -> (p instanceof ServerCrashProcedure)</span>
-<span class="source-line-no">2533</span><span id="line-2533"> && ((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 -> {</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 > 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() && request.hasNonce()</span>
+<span class="source-line-no">1777</span><span id="line-1777"> && 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() > 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<SecurityCapabilitiesResponse.Capability> capabilities = new HashSet<>();</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 && 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 && 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<MasterCoprocessor> coprocessorsToCheck,</span>
+<span class="source-line-no">2068</span><span id="line-2068"> Class<?> 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<ReplicationPeerDescription> 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<?> 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<ServerName> servers = server.listDecommissionedRegionServers();</span>
+<span class="source-line-no">2270</span><span id="line-2270"> response.addAllServerName((servers.stream().map(server -> 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<ServerName> servers = request.getServerNameList().stream()</span>
+<span class="source-line-no">2288</span><span id="line-2288"> .map(pbServer -> 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<byte[]> encodedRegionNames = request.getRegionList().stream()</span>
+<span class="source-line-no">2311</span><span id="line-2311"> .map(regionSpecifier -> 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() > 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 < 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<RegionInfo, Long> regionSizes = quotaManager.snapshotRegionSizes();</span>
+<span class="source-line-no">2454</span><span id="line-2454"> Map<TableName, Long> regionSizesByTable = new HashMap<>();</span>
+<span class="source-line-no">2455</span><span id="line-2455"> // Translate hregioninfo+long -> tablename+long</span>
+<span class="source-line-no">2456</span><span id="line-2456"> for (Entry<RegionInfo, Long> 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<TableName, Long> 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<TableName, SpaceQuotaSnapshot> tableSnapshots = quotaChore.getTableQuotaSnapshots();</span>
+<span class="source-line-no">2491</span><span id="line-2491"> for (Entry<TableName, SpaceQuotaSnapshot> 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<String, SpaceQuotaSnapshot> nsSnapshots = quotaChore.getNamespaceQuotaSnapshots();</span>
+<span class="source-line-no">2498</span><span id="line-2498"> for (Entry<String, SpaceQuotaSnapshot> 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<Address> clearedServers = new HashSet<>();</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 -> (p instanceof ServerCrashProcedure)</span>
+<span class="source-line-no">2531</span><span id="line-2531"> && ((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 -> {</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 > 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 -> 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"> () -> 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<MasterProcedureEnv> 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<MasterProcedureEnv> 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<Boolean> 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<Long> pids = new ArrayList<>();</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<Long> pids = new ArrayList<>();</span>
-<span class="source-line-no">2835</span><span id="line-2835"> final Set<ServerName> 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<ServerName> unknownServerNames = serverNames.stream()</span>
-<span class="source-line-no">2839</span><span id="line-2839"> .filter(sn -> 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 && 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 && 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 && 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<UserPermission> 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 && 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<Permission> permissions = new ArrayList<>();</span>
-<span class="source-line-no">3011</span><span id="line-3011"> for (int i = 0; i < 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<String> 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<Boolean> hasUserPermissions = new ArrayList<>();</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 < 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<Procedure<MasterProcedureEnv>> 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<MasterProcedureEnv> 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"> && !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<Address> 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<RSGroupInfo> 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<String, RSGroupInfo> name2Info = new HashMap<>();</span>
-<span class="source-line-no">3249</span><span id="line-3249"> List<TableDescriptor> needToFill =</span>
-<span class="source-line-no">3250</span><span id="line-3250"> new ArrayList<>(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<Address> 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 -> 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<String, String> configuration = new HashMap<>();</span>
-<span class="source-line-no">3384</span><span id="line-3384"> request.getConfigurationList().forEach(p -> 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<?> 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<RecentLogs.BalancerDecision> 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<RecentLogs.BalancerRejection> 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() && 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<ServerName> regionServers = new ArrayList<>(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<byte[]> columnFamilies = req.getColumnFamilyCount() > 0</span>
-<span class="source-line-no">3653</span><span id="line-3653"> ? req.getColumnFamilyList().stream().filter(cf -> !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 -> 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"> () -> 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<MasterProcedureEnv> 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<MasterProcedureEnv> 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<Boolean> 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<Long> pids = new ArrayList<>();</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<Long> pids = new ArrayList<>();</span>
+<span class="source-line-no">2833</span><span id="line-2833"> final Set<ServerName> 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<ServerName> unknownServerNames = serverNames.stream()</span>
+<span class="source-line-no">2837</span><span id="line-2837"> .filter(sn -> 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 && 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 && 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 && 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<UserPermission> 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 && 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<Permission> permissions = new ArrayList<>();</span>
+<span class="source-line-no">3009</span><span id="line-3009"> for (int i = 0; i < 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<String> 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<Boolean> hasUserPermissions = new ArrayList<>();</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 < 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<Procedure<MasterProcedureEnv>> 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<MasterProcedureEnv> 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"> && !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<Address> 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<RSGroupInfo> 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<String, RSGroupInfo> name2Info = new HashMap<>();</span>
+<span class="source-line-no">3247</span><span id="line-3247"> List<TableDescriptor> needToFill =</span>
+<span class="source-line-no">3248</span><span id="line-3248"> new ArrayList<>(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<Address> 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 -> 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<String, String> configuration = new HashMap<>();</span>
+<span class="source-line-no">3382</span><span id="line-3382"> request.getConfigurationList().forEach(p -> 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<?> 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<RecentLogs.BalancerDecision> 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<RecentLogs.BalancerRejection> 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() && 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<ServerName> regionServers = new ArrayList<>(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<byte[]> columnFamilies = req.getColumnFamilyCount() > 0</span>
+<span class="source-line-no">3651</span><span id="line-3651"> ? req.getColumnFamilyList().stream().filter(cf -> !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> Error</td></tr>
<tr class="a">
<td>blocks</td>
@@ -3324,20 +3324,27 @@
<td><figure><img src="images/icon_error_sml.gif" alt="" /></figure> 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>"2"</code></li></ul></td>
+<td>3</td>
+<td><figure><img src="images/icon_error_sml.gif" alt="" /></figure> 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> 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> 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> 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>"^package.*|^import.*|a href|href|http://|https://|ftp://|org.apache.thrift.|com.google.protobuf.|hbase.protobuf.generated"</code></li></ul></td>
<td>141</td>
<td><figure><img src="images/icon_error_sml.gif" alt="" /></figure> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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> 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 ...